Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
MagicSet.php
01 <?php
02
03 declare(strict_types=1);
04
05 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
06
07 use ProxyManager\Generator\MagicMethodGenerator;
08 use ProxyManager\ProxyGenerator\Util\GetMethodIfExists;
09 use Zend\Code\Generator\ParameterGenerator;
10 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
11 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
12 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
13 use ReflectionClass;
14 use Zend\Code\Generator\PropertyGenerator;
15
16 /**
17 * Magic `__set` for method interceptor value holder objects
18 *
19 * @author Marco Pivetta <ocramius@gmail.com>
20 * @license MIT
21 */
22 class MagicSet extends MagicMethodGenerator
23 {
24 /**
25 * Constructor
26 * @param ReflectionClass $originalClass
27 * @param PropertyGenerator $valueHolder
28 * @param PropertyGenerator $prefixInterceptors
29 * @param PropertyGenerator $suffixInterceptors
30 * @param PublicPropertiesMap $publicProperties
31 *
32 * @throws \Zend\Code\Generator\Exception\InvalidArgumentException
33 * @throws \InvalidArgumentException
34 */
35 public function __construct(
36 ReflectionClass $originalClass,
37 PropertyGenerator $valueHolder,
38 PropertyGenerator $prefixInterceptors,
39 PropertyGenerator $suffixInterceptors,
40 PublicPropertiesMap $publicProperties
41 ) {
42 parent::__construct(
43 $originalClass,
44 '__set',
45 [new ParameterGenerator('name'), new ParameterGenerator('value')]
46 );
47
48 $parent = GetMethodIfExists::get($originalClass, '__set');
49 $valueHolderName = $valueHolder->getName();
50
51 $callParent = PublicScopeSimulator::getPublicAccessSimulationCode(
52 PublicScopeSimulator::OPERATION_SET,
53 'name',
54 'value',
55 $valueHolder,
56 'returnValue'
57 );
58
59 if (! $publicProperties->isEmpty()) {
60 $callParent = 'if (isset(self::$' . $publicProperties->getName() . "[\$name])) {\n"
61 . ' $returnValue = ($this->' . $valueHolderName . '->$name = $value);'
62 . "\n} else {\n $callParent\n}\n\n";
63 }
64
65 $this->setBody(InterceptorGenerator::createInterceptedMethodBody(
66 $callParent,
67 $this,
68 $valueHolder,
69 $prefixInterceptors,
70 $suffixInterceptors,
71 $parent
72 ));
73 }
74 }
75