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.

Weitere Posts:

Dieser Beitrag wurde unter php, webdev veröffentlicht. Setze ein Lesezeichen auf den Permalink.

3 Antworten auf PHP Array Dereferencing ausprobiert

  1. Oliver sagt:

    Wieder eins weniger, dass die „tollen Python und C Programmierer“ als „das Totschlagargument“ gegen PHP verkaufen können.

    1. david sagt:

      Woho! Das geht in C? Kannste grad mal ein kleines Codebeispiel dazu hinzimmern?

      1. Oliver sagt:

        Ich kenne mich mit C nicht wirklich aus (ausser Klicki-Bunti in QT). Aber ich hab das schon öfter lesen dürfen, dass das ja gar nicht in PHP geht und die Sprache deshalb untergehen muss.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert