Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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 |
access-interceptor-value-holder.md
001 # Access Interceptor Value Holder Proxy
002
003 An access interceptor value holder is a smart reference proxy that allows you to dynamically
004 define logic to be executed before or after any of the wrapped object's methods
005 logic.
006
007 It wraps around a real instance of the object to be proxied, and can be useful for things like:
008
009 * caching execution of slow and heavy methods
010 * log method calls
011 * debugging
012 * event triggering
013 * handling of orthogonal logic, and [AOP](http://en.wikipedia.org/wiki/Aspect-oriented_programming) in general
014
015 ## Example
016
017 Here's an example of how you can create and use an access interceptor value holder:
018
019 ```php
020 <?php
021
022 use ProxyManager\Factory\AccessInterceptorValueHolderFactory as Factory;
023
024 require_once __DIR__ . '/vendor/autoload.php';
025
026 class Foo
027 {
028 public function doFoo()
029 {
030 echo "Foo!\n";
031 }
032 }
033
034 $factory = new Factory();
035
036 $proxy = $factory->createProxy(
037 new Foo(),
038 array('doFoo' => function () { echo "PreFoo!\n"; }),
039 array('doFoo' => function () { echo "PostFoo!\n"; })
040 );
041
042 $proxy->doFoo();
043 ```
044
045 This send something like following to your output:
046
047 ```
048 PreFoo!
049 Foo!
050 PostFoo!
051 ```
052
053 ## Implementing pre- and post- access interceptors
054
055 A proxy produced by the
056 [`ProxyManager\Factory\AccessInterceptorValueHolderFactory`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php)
057 implements both the
058 [`ProxyManager\Proxy\ValueHolderInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php)
059 and the
060 [`ProxyManager\Proxy\AccessInterceptorInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php).
061
062 Therefore, you can set an access interceptor callback by calling:
063
064 ```php
065 $proxy->setMethodPrefixInterceptor('methodName', function () { echo 'pre'; });
066 $proxy->setMethodSuffixInterceptor('methodName', function () { echo 'post'; });
067 ```
068
069 You can also listen to public properties access by attaching interceptors to `__get`, `__set`, `__isset` and `__unset`.
070
071 A prefix interceptor (executed before method logic) should have following signature:
072
073 ```php
074 /**
075 * @var object $proxy the proxy that intercepted the method call
076 * @var object $instance the wrapped instance within the proxy
077 * @var string $method name of the called method
078 * @var array $params sorted array of parameters passed to the intercepted
079 * method, indexed by parameter name
080 * @var bool $returnEarly flag to tell the interceptor proxy to return early, returning
081 * the interceptor's return value instead of executing the method logic
082 *
083 * @return mixed
084 */
085 $prefixInterceptor = function ($proxy, $instance, $method, $params, & $returnEarly) {};
086 ```
087
088 A suffix interceptor (executed after method logic) should have following signature:
089
090 ```php
091 /**
092 * @var object $proxy the proxy that intercepted the method call
093 * @var object $instance the wrapped instance within the proxy
094 * @var string $method name of the called method
095 * @var array $params sorted array of parameters passed to the intercepted
096 * method, indexed by parameter name
097 * @var mixed $returnValue the return value of the intercepted method
098 * @var bool $returnEarly flag to tell the proxy to return early, returning the interceptor's
099 * return value instead of the value produced by the method
100 *
101 * @return mixed
102 */
103 $suffixInterceptor = function ($proxy, $instance, $method, $params, $returnValue, & $returnEarly) {};
104 ```
105
106 ## Tuning performance for production
107
108 See [Tuning ProxyManager for Production](https://github.com/Ocramius/ProxyManager/blob/master/docs/tuning-for-production.md).