/** * {@inheritDoc} */ public function __invoke($className) { if (class_exists($className, false) || !$this->classNameInflector->isProxyClassName($className)) { return false; } $file = $this->fileLocator->getProxyFileName($className); if (!file_exists($file)) { return false; } return (bool) (require_once $file); }
/** * {@inheritDoc} */ public function __invoke(string $className) : bool { if (class_exists($className, false) || !$this->classNameInflector->isProxyClassName($className)) { return false; } $file = $this->fileLocator->getProxyFileName($className); if (!file_exists($file)) { return false; } /* @noinspection PhpIncludeInspection */ return (bool) (require_once $file); }
public function testGeneratesClass() { $generateProxy = new ReflectionMethod($this->factory, 'generateProxy'); $generateProxy->setAccessible(true); $generatedClass = UniqueIdentifierGenerator::getIdentifier('fooBar'); $this->classNameInflector->expects($this->any())->method('getProxyClassName')->with('stdClass')->will($this->returnValue($generatedClass)); $this->generatorStrategy->expects($this->once())->method('generate')->with($this->isInstanceOf('Zend\\Code\\Generator\\ClassGenerator')); $this->proxyAutoloader->expects($this->once())->method('__invoke')->with($generatedClass)->will($this->returnCallback(function ($className) { eval('class ' . $className . ' {}'); })); $this->assertSame($generatedClass, $generateProxy->invoke($this->factory, 'stdClass')); $this->assertTrue(class_exists($generatedClass, false)); $this->assertSame($generatedClass, $generateProxy->invoke($this->factory, 'stdClass')); }
/** * Generate a proxy from a class name * @param string $className * @return string proxy class name */ protected function generateProxy($className) { if (!isset($this->generatedClasses[$className])) { $this->generatedClasses[$className] = $this->inflector->getProxyClassName($className, array('factory' => get_class($this))); } $proxyClassName = $this->generatedClasses[$className]; if (!class_exists($proxyClassName)) { $className = $this->inflector->getUserClassName($className); $phpClass = new ClassGenerator($proxyClassName); $this->getGenerator()->generate(new ReflectionClass($className), $phpClass); $this->configuration->getGeneratorStrategy()->generate($phpClass); $this->configuration->getProxyAutoloader()->__invoke($proxyClassName); } return $proxyClassName; }
/** * @covers \ProxyManager\Autoloader\Autoloader::__invoke */ public function testWillAutoloadExistingFile() { $namespace = 'Foo'; $className = UniqueIdentifierGenerator::getIdentifier('Bar'); $fqcn = $namespace . '\\' . $className; $fileName = sys_get_temp_dir() . '/foo_' . uniqid() . '.php'; file_put_contents($fileName, '<?php namespace ' . $namespace . '; class ' . $className . '{}'); $this->classNameInflector->expects($this->once())->method('isProxyClassName')->with($fqcn)->will($this->returnValue(true)); $this->fileLocator->expects($this->once())->method('getProxyFileName')->will($this->returnValue($fileName)); $this->assertTrue($this->autoloader->__invoke($fqcn)); $this->assertTrue(class_exists($fqcn, false)); }