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 |
BindProxyProperties.php
01 <?php
02
03 declare(strict_types=1);
04
05 namespace ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator;
06
07 use ProxyManager\Generator\MethodGenerator;
08 use Zend\Code\Generator\ParameterGenerator;
09 use ProxyManager\ProxyGenerator\Util\Properties;
10 use ReflectionClass;
11 use Zend\Code\Generator\PropertyGenerator;
12
13 /**
14 * The `bindProxyProperties` method implementation for access interceptor scope localizers
15 *
16 * @author Marco Pivetta <ocramius@gmail.com>
17 * @license MIT
18 */
19 class BindProxyProperties extends MethodGenerator
20 {
21 /**
22 * Constructor
23 *
24 * @param ReflectionClass $originalClass
25 * @param PropertyGenerator $prefixInterceptors
26 * @param PropertyGenerator $suffixInterceptors
27 */
28 public function __construct(
29 ReflectionClass $originalClass,
30 PropertyGenerator $prefixInterceptors,
31 PropertyGenerator $suffixInterceptors
32 ) {
33 parent::__construct(
34 'bindProxyProperties',
35 [
36 new ParameterGenerator('localizedObject', $originalClass->getName()),
37 new ParameterGenerator('prefixInterceptors', 'array', []),
38 new ParameterGenerator('suffixInterceptors', 'array', []),
39 ],
40 static::FLAG_PRIVATE,
41 null,
42 "@override constructor to setup interceptors\n\n"
43 . "@param \\" . $originalClass->getName() . " \$localizedObject\n"
44 . "@param \\Closure[] \$prefixInterceptors method interceptors to be used before method logic\n"
45 . "@param \\Closure[] \$suffixInterceptors method interceptors to be used before method logic"
46 );
47
48 $localizedProperties = [];
49
50 $properties = Properties::fromReflectionClass($originalClass);
51
52 foreach ($properties->getAccessibleProperties() as $property) {
53 $propertyName = $property->getName();
54
55 $localizedProperties[] = '$this->' . $propertyName . ' = & $localizedObject->' . $propertyName . ';';
56 }
57
58 foreach ($properties->getPrivateProperties() as $property) {
59 $propertyName = $property->getName();
60
61 $localizedProperties[] = "\\Closure::bind(function () use (\$localizedObject) {\n "
62 . '$this->' . $propertyName . ' = & $localizedObject->' . $propertyName . ";\n"
63 . '}, $this, ' . var_export($property->getDeclaringClass()->getName(), true)
64 . ')->__invoke();';
65 }
66
67 $this->setBody(
68 ($localizedProperties ? implode("\n\n", $localizedProperties) . "\n\n" : '')
69 . '$this->' . $prefixInterceptors->getName() . " = \$prefixInterceptors;\n"
70 . '$this->' . $suffixInterceptors->getName() . " = \$suffixInterceptors;"
71 );
72 }
73 }
74