[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 declare(strict_types=1); 4 5 namespace ProxyManager\Factory; 6 7 use ProxyManager\Configuration; 8 use ProxyManager\Generator\ClassGenerator; 9 use ProxyManager\ProxyGenerator\ProxyGeneratorInterface; 10 use ProxyManager\Signature\Exception\InvalidSignatureException; 11 use ProxyManager\Signature\Exception\MissingSignatureException; 12 use ProxyManager\Version; 13 use ReflectionClass; 14 15 /** 16 * Base factory common logic 17 * 18 * @author Marco Pivetta <ocramius@gmail.com> 19 * @license MIT 20 */ 21 abstract class AbstractBaseFactory 22 { 23 /** 24 * @var \ProxyManager\Configuration 25 */ 26 protected $configuration; 27 28 /** 29 * Cached checked class names 30 * 31 * @var string[] 32 */ 33 private $checkedClasses = []; 34 35 /** 36 * @param \ProxyManager\Configuration $configuration 37 */ 38 public function __construct(Configuration $configuration = null) 39 { 40 $this->configuration = $configuration ?: new Configuration(); 41 } 42 43 /** 44 * Generate a proxy from a class name 45 * 46 * @param string $className 47 * @param mixed[] $proxyOptions 48 * 49 * @throws InvalidSignatureException 50 * @throws MissingSignatureException 51 * @throws \OutOfBoundsException 52 */ 53 protected function generateProxy(string $className, array $proxyOptions = []) : string 54 { 55 if (\array_key_exists($className, $this->checkedClasses)) { 56 return $this->checkedClasses[$className]; 57 } 58 59 $proxyParameters = [ 60 'className' => $className, 61 'factory' => get_class($this), 62 'proxyManagerVersion' => Version::getVersion(), 63 'proxyOptions' => $proxyOptions, 64 ]; 65 $proxyClassName = $this 66 ->configuration 67 ->getClassNameInflector() 68 ->getProxyClassName($className, $proxyParameters); 69 70 if (! class_exists($proxyClassName)) { 71 $this->generateProxyClass( 72 $proxyClassName, 73 $className, 74 $proxyParameters, 75 $proxyOptions 76 ); 77 } 78 79 $this 80 ->configuration 81 ->getSignatureChecker() 82 ->checkSignature(new ReflectionClass($proxyClassName), $proxyParameters); 83 84 return $this->checkedClasses[$className] = $proxyClassName; 85 } 86 87 abstract protected function getGenerator() : ProxyGeneratorInterface; 88 89 /** 90 * Generates the provided `$proxyClassName` from the given `$className` and `$proxyParameters` 91 * 92 * @param string $proxyClassName 93 * @param string $className 94 * @param array $proxyParameters 95 * @param mixed[] $proxyOptions 96 */ 97 private function generateProxyClass( 98 string $proxyClassName, 99 string $className, 100 array $proxyParameters, 101 array $proxyOptions = [] 102 ) : void { 103 $className = $this->configuration->getClassNameInflector()->getUserClassName($className); 104 $phpClass = new ClassGenerator($proxyClassName); 105 106 $this->getGenerator()->generate(new ReflectionClass($className), $phpClass, $proxyOptions); 107 108 $phpClass = $this->configuration->getClassSignatureGenerator()->addSignature($phpClass, $proxyParameters); 109 110 $this->configuration->getGeneratorStrategy()->generate($phpClass, $proxyOptions); 111 112 $autoloader = $this->configuration->getProxyAutoloader(); 113 114 $autoloader($proxyClassName); 115 } 116 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |