PHP Array Dereferencing ausprobiert

Ich konnte es nicht lassen und hab mir den PHP Trunk draufgemacht, um mal etwas mit dem Dereferencing herumzuspielen. Die Version im Trunk hört auf 5.3.99 und kann für die SVN-faulen als Snapshot hier geladen werden. Gleich mal etwas Konsolenromantik:

dav@david:/var/www$ php --version PHP 5.3.99-dev (cli) (built: Mar 28 2011 21:51:08)  Copyright (c) 1997-2011 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies dav@david:/var/www$ cat dereferencing.php  <?php  function test() {     return array("foo" => "bar"); }  print "Output: " . test()["foo"] . "\n"; dav@david:/var/www$ php dereferencing.php  Output: bar  

Joa, was soll ich sagen? Geht alles genauso, wie man sich das wünscht. Um mal ein komplexeres, sinnloses Beispiel auf den Tisch zu legen:

<?php  class Calc {     public static function getClosureManager()     {         return new ClosureManager;     } }  class ClosureManager {     function getSquareClosure()     {         return array("closure" => function($s)          {              return array("result" => $s * $s);          });     } }   $c = Calc::getClosureManager()->getSquareClosure()["closure"]; print $c(4)["result"] . "\n"; 

Geht also auch mit Closures und all dem OOP Schnickschnack. Bei der Bastelei sind mir auch gleich wieder 2 neue Wünsche eingefallen.

Ich hätte gerne…

class Calc {     function square($s)     {         return $s * $s;     } }  print (new Calc)->square(4); 

Java hat da kein Problem mit. Und dann noch das (zugegebenmaßen eher akademische, aus Javascript bekannte) Konstrukt:

function getClosure() {     return function($s)     {         return $s * $s;     } }  print getClosure()(5); 

Also eine zurückgegebene Closure direkt aufrufen können, ohne sie vorher in einer Variable zwischenspeichern zu müssen. Aber sterben werde ich auch so nicht.


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0