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

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

CHANGELOG.md

Zuletzt modifiziert: 02.04.2025, 15:02 - Dateigröße: 13.07 KiB


001  ---
002  title: Changelog
003  ---
004   
005  This is a list of changes/improvements that were introduced in ProxyManager
006   
007  ## 2.2.0
008   
009  This release provides support for the PHP 7.2 `object` type hint, as
010  well as dramatic (~300%) speed improvement during proxy class generation.
011  PHP 7.1 support has been dropped.
012   
013  Total issues resolved: **11**
014   
015  - [367: Property name (suffixes) differ after each generation of a proxy](https://github.com/Ocramius/ProxyManager/issues/367) thanks to @holtkamp
016  - [381: Adding `object` hit based tests and test assets - preparing for PHP 7.2 compatibility](https://github.com/Ocramius/ProxyManager/pull/381) thanks to @Ocramius
017  - [382: Removed redundant docblocks](https://github.com/Ocramius/ProxyManager/pull/382) thanks to @Ocramius
018  - [383: PHPStan version upgrade 0.8](https://github.com/Ocramius/ProxyManager/pull/383) thanks to @Ocramius
019  - [384: Group generated unique identifiers by name](https://github.com/Ocramius/ProxyManager/pull/384) thanks to @nicolas-grekas
020  - [385: #384 #367 deterministic generated property suffixes for generated properties](https://github.com/Ocramius/ProxyManager/pull/385) thanks to @Ocramius
021  - [386: Removed licence headers from all single source files](https://github.com/Ocramius/ProxyManager/pull/386) thanks to @Ocramius
022  - [387: Correct createProxy PHPDoc](https://github.com/Ocramius/ProxyManager/pull/387) thanks to @PurpleBooth
023  - [391: PHPUnit 6.x upgrade](https://github.com/Ocramius/ProxyManager/pull/391) thanks to @Ocramius
024  - [392: PHPStan level 7 analysis](https://github.com/Ocramius/ProxyManager/pull/392) thanks to @snapshotpl
025  - [393: remove inheritdoc & body parsing from generated proxies](https://github.com/Ocramius/ProxyManager/pull/393) thanks to @Tobion
026   
027  ## 2.1.1
028   
029  This release provides aggressive improvements in static introspection via
030  [phpstan/phpstan](https://github.com/phpstan/phpstan). No functional
031  changes, just removed possible bugs due to excessive parameter count
032  in method calls, as well as test type hint fixes.
033   
034  Total issues resolved: **3**
035   
036  - [351: Travis already has xdebug pre-installed for PHP 7.1](https://github.com/Ocramius/ProxyManager/pull/351)
037  - [358: Fix #351 - travis has xdebug pre-installed for PHP 7.1](https://github.com/Ocramius/ProxyManager/pull/358)
038  - [361: PHPStan inspection fixes](https://github.com/Ocramius/ProxyManager/pull/361)
039   
040  ## 2.1.0
041   
042  ### Improved
043   
044  - Introduced support for PHP 7.1, `void` and nullable (`?`)
045    types [#314](https://github.com/Ocramius/ProxyManager/issues/314)
046    [#327](https://github.com/Ocramius/ProxyManager/pull/327)
047  - The test suite is now fully CI-covered by mutation testing [#348](https://github.com/Ocramius/ProxyManager/pull/348)
048  - Moved all performance testing to PHPBench [#326](https://github.com/Ocramius/ProxyManager/pull/326)
049  - PHP 7.0 support dropped [#327](https://github.com/Ocramius/ProxyManager/pull/327)
050   
051  Total issues resolved: **9**
052   
053  - [290: Branch-alias version bump: master bump to 3.0.x](https://github.com/Ocramius/ProxyManager/pull/290)
054  - [314: Nullable params type](https://github.com/Ocramius/ProxyManager/issues/314)
055  - [326: Moved performance tests to phpbench-based suite](https://github.com/Ocramius/ProxyManager/pull/326)
056  - [327: PHP 7.1 support](https://github.com/Ocramius/ProxyManager/pull/327)
057  - [336: Hotfix tests for php 7 support](https://github.com/Ocramius/ProxyManager/pull/336)
058  - [339: Provided type ?... is invalid](https://github.com/Ocramius/ProxyManager/issues/339)
059  - [343: Fix typo in ghost objects lazy loading code example](https://github.com/Ocramius/ProxyManager/pull/343)
060  - [348: Introduced full mutation testing](https://github.com/Ocramius/ProxyManager/pull/348)
061  - [349: install xdebug manually for php 7.1](https://github.com/Ocramius/ProxyManager/pull/349)
062   
063  ## 2.0.4
064   
065  ### Fixed
066   
067  - Remove deprecated `getMock` usage from tests [#325](https://github.com/Ocramius/ProxyManager/pull/325)
068  - Fix incorrect type in docs example [#329](https://github.com/Ocramius/ProxyManager/pull/329)
069  - Bug when proxy `__get` magic method [#344](https://github.com/Ocramius/ProxyManager/pull/344)
070  - Fix lazy loading value holder magic method support [#345](https://github.com/Ocramius/ProxyManager/pull/345)
071   
072  ## 2.0.3
073   
074  ### Fixed
075   
076  - Various test suite cleanups, mostly because of
077    [new PHPUnit 5.4.0 deprecations being introduced](https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-5.4.0)
078    [#318](https://github.com/Ocramius/ProxyManager/issues/318)
079  - Removed `zendframework/zend-code:3.0.3` from installable dependencies, since
080    a critical bug was introduced in it [#321](https://github.com/Ocramius/ProxyManager/issues/321) 
081    [#323](https://github.com/Ocramius/ProxyManager/issues/323)
082    [#324](https://github.com/Ocramius/ProxyManager/issues/324). Please upgrade to
083    `zendframework/zend-code:3.0.4` or newer.
084   
085  ## 2.0.2
086   
087  ### Fixed
088   
089  - Various optimizations were performed in the [`ocramius/package-versions`](https://github.com/Ocramius/PackageVersions)
090    integration in order to prevent "class not found" fatals. [#294](https://github.com/Ocramius/ProxyManager/issues/294)
091  - Null objects produced via a given class name were not extending from the given class name, causing obvious LSP
092    compliance and type-compatibility issues. [#300](https://github.com/Ocramius/ProxyManager/issues/300)
093    [#301](https://github.com/Ocramius/ProxyManager/issues/301)
094  - Specific installation versions were removed from the [README.md](README.md) install instructions, since composer
095    is installing the latest available version by default. [#305](https://github.com/Ocramius/ProxyManager/issues/305)
096  - PHP 7.0.6 support was dropped. PHP 7.0.6 includes some nasty reflection bugs that caused `__isset` to be called when
097    `ReflectionProperty#getValue()` is used (https://bugs.php.net/72174).
098    [#306](https://github.com/Ocramius/ProxyManager/issues/306)
099    [#308](https://github.com/Ocramius/ProxyManager/issues/308)
100  - PHP 7.0.7 contains additional limitations as to when `$this` can be used. Specifically, `$this` cannot be used as a
101    parameter name for closures that have an already assigned `$this`. Due to `$this` being incorrectly used as parameter
102    name within this library, running ProxyManager on PHP 7.0.7 would have caused a fatal error.
103    [#306](https://github.com/Ocramius/ProxyManager/issues/306)
104    [#308](https://github.com/Ocramius/ProxyManager/issues/308)
105    [#316](https://github.com/Ocramius/ProxyManager/issues/316)
106  - PHP 7.1.0-DEV includes type-checks for incompatible arithmetic operations: some of those operations were erroneously
107    performed in the library internals. [#308](https://github.com/Ocramius/ProxyManager/issues/308)
108   
109  ## 2.0.1
110   
111  ### Fixed
112   
113  - Travis-CI environment was fixed to test the library using the minimum dependencies version.
114   
115  ### Added
116   
117  - Added unit test to make sure that properties skipped should be preserved even being cloned.
118   
119  ## 2.0.0
120   
121  ### BC Breaks
122   
123  Please refer to [the upgrade documentation](UPGRADE.md) to see which backwards-incompatible
124  changes were applied to this release.
125   
126  ### New features
127   
128  #### PHP 7 support
129   
130  ProxyManager will now correctly operate in PHP 7 environments.
131   
132  #### PHP 7 Return type hints
133   
134  ProxyManager will now correctly mimic signatures of methods with return type hints:
135   
136  ```php
137  class SayHello
138  {
139      public function hello() : string
140      {
141          return 'hello!';
142      }
143  }
144  ```
145   
146  #### PHP 7 Scalar type hints
147   
148  ProxyManager will now correctly mimic signatures of methods with scalar type hints
149   
150  ```php
151  class SayHello
152  {
153      public function hello(string $name) : string
154      {
155          return 'hello, ' . $name;
156      }
157  }
158  ```
159   
160  #### PHP 5.6 Variadics support
161   
162  ProxyManager will now correctly mimic behavior of methods with variadic parameters:
163   
164  ```php
165  class SayHello
166  {
167      public function hello(string ...$names) : string
168      {
169          return 'hello, ' . implode(', ', $names);
170      }
171  }
172  ```
173   
174  By-ref variadic arguments are also supported:
175   
176  ```php
177  class SayHello
178  {
179      public function hello(string ... & $names)
180      {
181          foreach ($names as & $name) {
182              $name = 'hello, ' . $name;
183          }
184      }
185  }
186  ```
187   
188  #### Constructors in proxies are not replaced anymore
189   
190  In ProxyManager v1.x, the constructor of a proxy was completely replaced with a method
191  accepting proxy-specific parameters.
192   
193  This is no longer true, and you will be able to use the constructor of your objects as
194  if the class wasn't proxied at all:
195   
196  ```php
197  class SayHello
198  {
199      public function __construct()
200      {
201          echo 'Hello!';
202      }
203  }
204   
205  /* @var $proxyGenerator \ProxyManager\ProxyGenerator\ProxyGeneratorInterface */
206  $proxyClass = $proxyGenerator->generateProxy(
207      new ReflectionClass(SayHello::class),
208      new ClassGenerator('ProxyClassName')
209  );
210   
211  eval('<?php ' . $proxyClass->generate());
212   
213  $proxyName = $proxyClass->getName();
214  $object = new ProxyClassName(); // echoes "Hello!"
215   
216  var_dump($object); // a proxy object
217  ```
218   
219  If you still want to manually build a proxy (without factories), a
220  `public static staticProxyConstructor` method is added to the generated proxy classes.
221   
222  #### Friend classes support
223   
224  You can now access state of "friend objects" at any time.
225   
226  ```php
227  class EmailAddress
228  {
229      private $address;
230   
231      public function __construct(string $address)
232      {
233          assertEmail($address);
234          
235          $this->address = $address;
236      }
237      
238      public function equalsTo(EmailAddress $other)
239      {
240          return $this->address === $other->address;
241      }
242  }
243  ```
244   
245  When using lazy-loading or access-interceptors, the `equalsTo` method will
246  properly work, as even `protected` and `private` access are now correctly proxied.
247   
248  #### Ghost objects now only lazy-load on state-access
249   
250  Lazy loading ghost objects now trigger lazy-loading only when their state is accessed.
251  This also implies that lazy loading ghost objects cannot be used with interfaces anymore.
252   
253  ```php
254  class AccessPolicy
255  {
256      private $policyName;
257      
258      /**
259       * Calling this method WILL cause lazy-loading, when using a ghost object,
260       * as the method is accessing the object's state
261       */
262      public function getPolicyName() : string
263      {
264          return $this->policyName;        
265      }
266      
267      /**
268       * Calling this method WILL NOT cause lazy-loading, when using a ghost object,
269       * as the method is not reading any from the object.
270       */
271      public function allowAccess() : bool
272      {
273          return false;
274      }
275  }
276  ```
277   
278  #### Faster ghost object state initialization
279   
280  Lazy loading ghost objects can now be initialized in a more efficient way, by avoiding
281  reflection or setters:
282   
283  ```php
284  class Foo
285  {
286      private $a;
287      protected $b;
288      public $c;
289  }
290   
291  $factory = new \ProxyManager\Factory\LazyLoadingGhostFactory();
292   
293  $proxy = $factory-createProxy(
294      Foo::class,
295      function (
296          GhostObjectInterface $proxy, 
297          string $method, 
298          array $parameters, 
299          & $initializer,
300          array $properties
301      ) {
302          $initializer   = null;
303   
304          $properties["\0Foo\0a"] = 'abc';
305          $properties["\0*\0b"]   = 'def';
306          $properties['c']        = 'ghi';
307   
308          return true;
309      }
310  );
311   
312   
313  $reflectionA = new ReflectionProperty(Foo::class, 'a');
314  $reflectionA->setAccessible(true);
315   
316  var_dump($reflectionA->getValue($proxy)); // dumps "abc"
317   
318  $reflectionB = new ReflectionProperty(Foo::class, 'b');
319  $reflectionB->setAccessible(true);
320   
321  var_dump($reflectionB->getValue($proxy)); // dumps "def"
322   
323  var_dump($proxy->c); // dumps "ghi"
324  ```
325   
326  #### Skipping lazy-loaded properties in generated proxies
327   
328  Lazy loading ghost objects can now skip lazy-loading for certain properties.
329  This is especially useful when you have properties that are always available,
330  such as identifiers of entities:
331   
332  ```php
333  class User
334  {
335      private $id;
336      private $username;
337   
338      public function getId() : int
339      {
340          return $this->id;
341      }
342   
343      public function getUsername() : string
344      {
345          return $this->username;
346      }
347  }
348   
349  /* @var $proxy User */
350  $proxy = (new \ProxyManager\Factory\LazyLoadingGhostFactory())->createProxy(
351      User::class,
352      function (
353          GhostObjectInterface $proxy,
354          string $method,
355          array $parameters,
356          & $initializer,
357          array $properties
358      ) {
359          $initializer   = null;
360   
361          var_dump('Triggered lazy-loading!');
362   
363          $properties["\0User\0username"] = 'Ocramius';
364   
365          return true;
366      },
367      [
368          'skippedProperties' => [
369              "\0User\0id",
370          ],
371      ]
372  );
373   
374  $idReflection = new \ReflectionProperty(User::class, 'id');
375   
376  $idReflection->setAccessible(true);
377  $idReflection->setValue($proxy, 123);
378   
379  var_dump($proxy->getId());       // 123
380  var_dump($proxy->getUsername()); // "Triggered lazy-loading!", then "Ocramius"
381  ```
382   
383  #### Proxies are now always generated on-the-fly by default
384   
385  Proxies are now automatically generated any time you require them: no configuration
386  needed. If you want to gain better performance, you may still want to read
387  the [tuning for production docs](docs/tuning-for-production.md).
388   
389  #### Proxy names are now hashed, simplified signature is attached to them
390   
391  Proxy classes now have shorter names, as the parameters used to generate them are
392  hashed into their name. A signature is attached to proxy classes (as a private static
393  property) so that proxy classes aren't re-used across library updates.
394  Upgrading ProxyManager will now cause all proxies to be re-generated automatically,
395  while the old proxy files are going to be ignored.
396