Compare commits

...

3 Commits

Author SHA1 Message Date
Fabien Potencier
39a9bc391d fixed CS 2014-09-22 10:32:35 +02:00
Fabien Potencier
d3b0938fa2 [ClassLoader] simplified phpdoc 2014-08-28 16:35:12 +02:00
Tobias Stöckler
3acea26b17 [ClassLoader] Add a __call() method to XcacheClassLoader 2014-08-28 16:33:42 +02:00
15 changed files with 72 additions and 46 deletions

View File

@@ -15,7 +15,7 @@ namespace Symfony\Component\ClassLoader;
* ApcClassLoader implements a wrapping autoloader cached in APC for PHP 5.3.
*
* It expects an object implementing a findFile method to find the file. This
* allow using it as a wrapper around the other loaders of the component (the
* allows using it as a wrapper around the other loaders of the component (the
* ClassLoader and the UniversalClassLoader for instance) but also around any
* other autoloader following this convention (the Composer one for instance)
*
@@ -46,7 +46,7 @@ class ApcClassLoader
/**
* The class loader object being decorated.
*
* @var \Symfony\Component\ClassLoader\ClassLoader
* @var object
* A class loader object that implements the findFile() method.
*/
protected $decorated;
@@ -133,5 +133,4 @@ class ApcClassLoader
{
return call_user_func_array(array($this->decorated, $method), $args);
}
}

View File

@@ -71,7 +71,6 @@ class ClassMapGenerator
foreach ($classes as $class) {
$map[$class] = $path;
}
}
return $map;

View File

@@ -55,13 +55,13 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
public function getLoadClassTests()
{
return array(
public function getLoadClassTests()
{
return array(
array('\\Apc\\Namespaced\\Foo', 'Apc\\Namespaced\\Foo', '->loadClass() loads Apc\Namespaced\Foo class'),
array('Apc_Pearlike_Foo', 'Apc_Pearlike_Foo', '->loadClass() loads Apc_Pearlike_Foo class'),
);
}
}
/**
* @dataProvider getLoadClassFromFallbackTests
@@ -77,15 +77,15 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
public function getLoadClassFromFallbackTests()
{
return array(
public function getLoadClassFromFallbackTests()
{
return array(
array('\\Apc\\Namespaced\\Baz', 'Apc\\Namespaced\\Baz', '->loadClass() loads Apc\Namespaced\Baz class'),
array('Apc_Pearlike_Baz', 'Apc_Pearlike_Baz', '->loadClass() loads Apc_Pearlike_Baz class'),
array('\\Apc\\Namespaced\\FooBar', 'Apc\\Namespaced\\FooBar', '->loadClass() loads Apc\Namespaced\Baz class from fallback dir'),
array('Apc_Pearlike_FooBar', 'Apc_Pearlike_FooBar', '->loadClass() loads Apc_Pearlike_Baz class from fallback dir'),
);
}
}
/**
* @dataProvider getLoadClassNamespaceCollisionTests
@@ -100,9 +100,9 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
public function getLoadClassNamespaceCollisionTests()
{
return array(
public function getLoadClassNamespaceCollisionTests()
{
return array(
array(
array(
'Apc\\NamespaceCollision\\A' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha',
@@ -136,7 +136,7 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
'->loadClass() loads NamespaceCollision\A\B\Bar from beta.',
),
);
}
}
/**
* @dataProvider getLoadClassPrefixCollisionTests
@@ -150,9 +150,9 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertTrue(class_exists($className), $message);
}
public function getLoadClassPrefixCollisionTests()
{
return array(
public function getLoadClassPrefixCollisionTests()
{
return array(
array(
array(
'ApcPrefixCollision_A_' => __DIR__.DIRECTORY_SEPARATOR.'Fixtures/Apc/alpha/Apc',
@@ -186,5 +186,5 @@ class ApcUniversalClassLoaderTest extends \PHPUnit_Framework_TestCase
'->loadClass() loads ApcPrefixCollision_A_B_Bar from beta.',
),
);
}
}
}

View File

@@ -76,7 +76,7 @@ class ClassMapGeneratorTest extends \PHPUnit_Framework_TestCase
'Namespaced\\Foo' => realpath(__DIR__).'/Fixtures/Namespaced/Foo.php',
'Namespaced\\Baz' => realpath(__DIR__).'/Fixtures/Namespaced/Baz.php',
'Namespaced\\WithComments' => realpath(__DIR__).'/Fixtures/Namespaced/WithComments.php',
)
),
),
array(__DIR__.'/Fixtures/beta/NamespaceCollision', array(
'NamespaceCollision\\A\\B\\Bar' => realpath(__DIR__).'/Fixtures/beta/NamespaceCollision/A/B/Bar.php',

View File

@@ -2,4 +2,6 @@
namespace ClassesWithParents;
class A extends B {}
class A extends B
{
}

View File

@@ -2,4 +2,6 @@
namespace ClassesWithParents;
class B implements CInterface {}
class B implements CInterface
{
}

View File

@@ -13,5 +13,4 @@ namespace ClassMap;
class SomeClass extends SomeParent implements SomeInterface
{
}

View File

@@ -13,5 +13,4 @@ namespace ClassMap;
interface SomeInterface
{
}

View File

@@ -13,5 +13,4 @@ namespace ClassMap;
abstract class SomeParent
{
}

View File

@@ -1,14 +1,24 @@
<?php
namespace {
class A {}
class A
{
}
}
namespace Alpha {
class A {}
class B {}
class A
{
}
class B
{
}
}
namespace Beta {
class A {}
class B {}
class A
{
}
class B
{
}
}

View File

@@ -11,5 +11,9 @@
namespace Foo\Bar;
class A {}
class B {}
class A
{
}
class B
{
}

View File

@@ -1,7 +1,8 @@
<?php
trait TD
{}
{
}
trait TZ
{

View File

@@ -25,6 +25,7 @@ namespace Foo {
class CBar implements IBar
{
use TBar, TFooBar;
use TBar;
use TFooBar;
}
}

View File

@@ -287,7 +287,6 @@ class UniversalClassLoader
return $file;
}
}
} else {
// PEAR-like class name
$normalizedClass = str_replace('_', DIRECTORY_SEPARATOR, $class).'.php';

View File

@@ -12,7 +12,7 @@
namespace Symfony\Component\ClassLoader;
/**
* XcacheClassLoader implements a wrapping autoloader cached in Xcache for PHP 5.3.
* XcacheClassLoader implements a wrapping autoloader cached in XCache for PHP 5.3.
*
* It expects an object implementing a findFile method to find the file. This
* allows using it as a wrapper around the other loaders of the component (the
@@ -43,31 +43,35 @@ namespace Symfony\Component\ClassLoader;
class XcacheClassLoader
{
private $prefix;
private $classFinder;
/**
* @var object A class loader object that implements the findFile() method
*/
private $decorated;
/**
* Constructor.
*
* @param string $prefix A prefix to create a namespace in Xcache
* @param object $classFinder An object that implements findFile() method.
* @param string $prefix The XCache namespace prefix to use.
* @param object $decorated A class loader object that implements the findFile() method.
*
* @throws \RuntimeException
* @throws \InvalidArgumentException
*
* @api
*/
public function __construct($prefix, $classFinder)
public function __construct($prefix, $decorated)
{
if (!extension_loaded('Xcache')) {
throw new \RuntimeException('Unable to use XcacheClassLoader as Xcache is not enabled.');
if (!extension_loaded('xcache')) {
throw new \RuntimeException('Unable to use XcacheClassLoader as XCache is not enabled.');
}
if (!method_exists($classFinder, 'findFile')) {
if (!method_exists($decorated, 'findFile')) {
throw new \InvalidArgumentException('The class finder must implement a "findFile" method.');
}
$this->prefix = $prefix;
$this->classFinder = $classFinder;
$this->decorated = $decorated;
}
/**
@@ -116,10 +120,18 @@ class XcacheClassLoader
if (xcache_isset($this->prefix.$class)) {
$file = xcache_get($this->prefix.$class);
} else {
$file = $this->classFinder->findFile($class);
$file = $this->decorated->findFile($class);
xcache_set($this->prefix.$class, $file);
}
return $file;
}
/**
* Passes through all unknown calls onto the decorated object.
*/
public function __call($method, $args)
{
return call_user_func_array(array($this->decorated, $method), $args);
}
}