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-proxy.html
001 <!DOCTYPE html>
002 <html class="no-js" id="top">
003 <head>
004 <title>ProxyManager - Tuning the ProxyManager for production</title>
005
006 <meta name="description" content="A proxyManager write in php" />
007 <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, production" />
008 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
009 <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
010 <link href="css/styles.css" rel="stylesheet" />
011 <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
012 <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
013 <script>hljs.initHighlightingOnLoad();</script>
014 <link rel="shortcut icon" href="favicon.ico">
015 </head>
016 <body>
017
018 <header class="site-header">
019 <div class="container">
020 <h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
021
022 <nav class="main-nav" role="navigation">
023 <ul>
024 <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
025 <div class="bcms-clearfix"></div>
026 </li>
027 </ul>
028 </nav>
029 </div>
030 </header>
031 <main role="main">
032 <section class="component-content">
033
034 <div class="component-demo" id="live-demo">
035 <div class="container">
036 <div class="main-wrapper" style="text-align: right">
037 <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&repo=ProxyManager&type=fork&count=true&size=large"
038 allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
039
040 <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&repo=ProxyManager&type=watch&count=true&size=large"
041 allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
042
043 </div>
044 <div class="bcms-clearfix bcms-clearfix"></div>
045 </div>
046 </div>
047 <div class="component-info">
048 <div class="container">
049 <aside class="sidebar">
050 <nav class="spy-nav">
051 <ul>
052 <li><a href="index.html">Intro</a></li>
053 <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
054 <li><a href="null-object.html">Null Objects</a></li>
055 <li><a href="ghost-object.html">Ghost Objects</a></li>
056 <li><a href="remote-object.html">Remote Object</a></li>
057 <li><a href="contributing.html">Contributing</a></li>
058 <li><a href="credits.html">Credits</a></li>
059 <li><a href="copyright.html">Copyright</a></li>
060 </ul>
061 </nav>
062 <div class="bcms-clearfix bcms-clearfix"></div>
063 <a class="btn btn-action btn-full download-component"
064 href="download.html">Download</a>
065 <div class="bcms-clearfix"></div>
066 </aside>
067
068 <div class="content">
069 <div class="bcms-clearfix"></div>
070 <h3 class="section-title">Access Interceptor Value Holder Proxy</h3>
071
072 <p>An access interceptor value holder is a smart reference proxy that allows you to dynamically define logic to be executed before or after any of the wrapped object's methods logic.</p>
073
074 <p>It wraps around a real instance of the object to be proxied, and can be useful for things like:</p>
075
076 <ul>
077 <li>caching execution of slow and heavy methods</li>
078 <li>log method calls</li>
079 <li>debugging</li>
080 <li>event triggering</li>
081 <li>handling of orthogonal logic, and <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" target="_blank">AOP</a> in general</li>
082 </ul>
083 <hr />
084 <h3>Example</h3>
085
086 <p>Here's an example of how you can create and use an access interceptor value holder:</p>
087
088 <pre>
089 <code class="php">
090 <?php
091
092 use ProxyManager\Factory\AccessInterceptorValueHolderFactory as Factory;
093
094 require_once __DIR__ . '/vendor/autoload.php';
095
096 class Foo
097 {
098 public function doFoo()
099 {
100 echo "Foo!\n";
101 }
102 }
103
104 $factory = new Factory();
105
106 $proxy = $factory->createProxy(
107 new Foo(),
108 array('doFoo' => function () { echo "PreFoo!\n"; }),
109 array('doFoo' => function () { echo "PostFoo!\n"; })
110 );
111
112 $proxy->doFoo();
113 </code>
114 </pre>
115
116 <p>This send something like following to your output:</p>
117
118 <pre>
119 <code class="php">
120 PreFoo!
121 Foo!
122 PostFoo!
123 </code>
124 </pre>
125
126 <hr />
127 <h3>Implementing pre- and post- access interceptors</h3>
128
129 <p>A proxy produced by the <code><a href="https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php" target="_blank">ProxyManager\Factory\AccessInterceptorValueHolderFactory</a></code> implements both the <code><a href="https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php" target="_blank">ProxyManager\Proxy\ValueHolderInterface</a></code> and the <code><a href="https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php" target="_blank">ProxyManager\Proxy\AccessInterceptorInterface</a></code>.</p>
130
131
132 <p>Therefore, you can set an access interceptor callback by calling:</p>
133
134 <pre>
135 <code class="php">
136 $proxy->setMethodPrefixInterceptor('methodName', function () { echo 'pre'; });
137 $proxy->setMethodSuffixInterceptor('methodName', function () { echo 'post'; });
138 </code>
139 </pre>
140
141 <p>You can also listen to public properties access by attaching interceptors to <code>__get</code>, <code>__set</code>, <code>__isset</code> and <code>__unset</code>.</p>
142
143 <p>A prefix interceptor (executed before method logic) should have following signature:</p>
144
145 <pre>
146 <code class="php">
147 /**
148 * @var object $proxy the proxy that intercepted the method call
149 * @var object $instance the wrapped instance within the proxy
150 * @var string $method name of the called method
151 * @var array $params sorted array of parameters passed to the intercepted
152 * method, indexed by parameter name
153 * @var bool $returnEarly flag to tell the interceptor proxy to return early, returning
154 * the interceptor's return value instead of executing the method logic
155 *
156 * @return mixed
157 */
158 $prefixInterceptor = function ($proxy, $instance, $method, $params, & $returnEarly) {};
159 </code>
160 </pre>
161
162 A suffix interceptor (executed after method logic) should have following signature:
163
164 <pre>
165 <code class="php">
166 /**
167 * @var object $proxy the proxy that intercepted the method call
168 * @var object $instance the wrapped instance within the proxy
169 * @var string $method name of the called method
170 * @var array $params sorted array of parameters passed to the intercepted
171 * method, indexed by parameter name
172 * @var mixed $returnValue the return value of the intercepted method
173 * @var bool $returnEarly flag to tell the proxy to return early, returning the interceptor's
174 * return value instead of the value produced by the method
175 *
176 * @return mixed
177 */
178 $suffixInterceptor = function ($proxy, $instance, $method, $params, $returnValue, & $returnEarly) {};
179 </code>
180 </pre>
181
182 <hr />
183 <h3>Tuning performance for production</h3>
184
185 <p>See <a href="production.html">Tuning ProxyManager for Production</a>.</p>
186 </main>
187
188 <footer class="site-footer" role="contentinfo">
189 <div class="container">
190 <div class="footer-logos">
191 <ul>
192 <li><a href="index.html">Intro</a> | </li>
193 <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
194 <li><a href="null-object.html">Null Objects</a> | </li>
195 <li><a href="ghost-object.html">Ghost Objects</a> | </li>
196 <li><a href="remote-object.html">Remote Object</a> | </li>
197 <li><a href="contributing.html">Contributing</a> | </li>
198 <li><a href="credits.html">Credits</a> | </li>
199 <li><a href="copyright.html">Copyright</a></li>
200 </ul>
201 </div>
202 </div>
203
204 <div class="bcms-clearfix"></div>
205 </footer>
206 <div class="bcms-clearfix"></div>
207 </body>
208 </html>
209