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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

access-interceptor-scope-localizer-proxy.html

Zuletzt modifiziert: 09.10.2024, 12:56 - Dateigröße: 7.71 KiB


 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&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;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&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;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 Scope Localizer Proxy</h3>
 071   
 072      <p>An access interceptor scope localizer is a smart reference proxy that allows you to dynamically define logic to be executed before or after any of the proxied object's methods' logic.</p>
 073      
 074      <p>It works exactly like the <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>, with some minor differences in behavior.</p>
 075   
 076      <p>The working concept of an access interceptor scope localizer is to localize scope of a proxied object:</p>
 077     
 078      <pre>
 079          <code class="php">
 080  class Example
 081  {
 082      protected $foo;
 083      protected $bar;
 084      protected $baz;
 085   
 086      public function doFoo()
 087      {
 088          // ...
 089      }
 090  }
 091   
 092  class ExampleProxy extends Example
 093  {
 094      public function __construct(Example $example)
 095      {
 096          $this->foo = &amp; $example->foo;
 097          $this->bar = &amp; $example->bar;
 098          $this->baz = &amp; $example->baz;
 099      }
 100   
 101      public function doFoo()
 102      {
 103          return parent::doFoo();
 104      }
 105  }
 106          </code>
 107      </pre>
 108   
 109      <p>This allows to create a mirror copy of the real instance, where any change in the proxy or in the real instance is reflected in both objects.</p>
 110   
 111      <p>The main advantage of this approach is that the proxy is now safe against fluent interfaces, which would break an <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a> instead.</p>
 112  <hr />    
 113      <h3>Differences with <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>:</h3>
 114      
 115      <ul>
 116          <li>It does <strong>NOT</strong> implement the <code>ProxyManager\Proxy\ValueHolderInterface</code>, since the proxy itself does not keep a reference to the original object being proxied</li>
 117          <li>In all interceptor methods (see <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>), the $instance passed in is the proxy itself. There is no way to gather a reference to the original object right now, and that's mainly to protect from misuse.</li>
 118      </ul>
 119  <hr />
 120   
 121      <h3>Known limitations</h3>
 122   
 123      <ul>
 124          <li>It is <strong>NOT</strong> possible to intercept access to public properties</li>
 125          <li>It is <strong>NOT</strong> possible to proxy interfaces, since this proxy relies on <code>parent::method()</code> calls. Interfaces obviously don't provide a parent method implementation.</li>
 126          <li>calling unset on a property of an access interceptor scope localizer (or the real instance) will cause the two objects to be un-synchronized, with possible unexpected behaviour.</li>
 127          <li>serializing or un-serializing an access interceptor scope localizer (or the real instance) will not cause the real instance (or the proxy) to be serialized or un-serialized</li>
 128          <li>if a proxied object contains private properties, then an exception will be thrown if you use PHP <code>&lt; 5.4.0</code>.</li>
 129      </ul>
 130  <hr />
 131      <h3>Example</h3>
 132   
 133      <p>Here's an example of how you can create and use an access interceptor scope localizer :</p>
 134   
 135      <pre>
 136          <code class="php">
 137  &lt;?php
 138   
 139  use ProxyManager\Factory\AccessInterceptorScopeLocalizerFactory as Factory;
 140   
 141  require_once __DIR__ . '/vendor/autoload.php';
 142   
 143  class Foo
 144  {
 145      public function doFoo()
 146      {
 147          echo "Foo!\n";
 148      }
 149  }
 150   
 151  $factory = new Factory();
 152   
 153  $proxy = $factory->createProxy(
 154      new Foo(),
 155      array('doFoo' => function () { echo "PreFoo!\n"; }),
 156      array('doFoo' => function () { echo "PostFoo!\n"; })
 157  );
 158   
 159  $proxy->doFoo();
 160          </code>
 161      </pre>
 162   
 163      <p>This send something like following to your output:</p>
 164   
 165      <pre>
 166          <code class="php">
 167  PreFoo!
 168  Foo!
 169  PostFoo!
 170          </code>
 171      </pre>
 172   
 173      <p>This is pretty much the same logic that you can find in <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>.</p>
 174      
 175  </main>
 176   
 177      <footer class="site-footer" role="contentinfo">
 178          <div class="container">
 179              <div class="footer-logos">
 180                  <ul>
 181                      <li><a href="index.html">Intro</a> | </li>
 182                      <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
 183                      <li><a href="null-object.html">Null Objects</a> | </li>
 184                      <li><a href="ghost-object.html">Ghost Objects</a> | </li>
 185                      <li><a href="remote-object.html">Remote Object</a> | </li>
 186                      <li><a href="contributing.html">Contributing</a> | </li>
 187                      <li><a href="credits.html">Credits</a> | </li>
 188                      <li><a href="copyright.html">Copyright</a></li>
 189                  </ul>
 190              </div>
 191          </div>
 192   
 193          <div class="bcms-clearfix"></div>
 194      </footer>
 195      <div class="bcms-clearfix"></div>
 196      </body>
 197  </html>
 198