6. März 2012 | 1 Comment Am ersten März wurde von php.net angekündigt das die arbeiten an PHP 5.4.0 abgeschlossen sind und die neue Version somit zum Download bereit steht! Mit diesem neuen Release gibt es einige neue Features (kürzere Array-Schreibweise, höhere performance, …) aber auch über 100 Bugfixes. Auf einige der neuen Features möchte ich kurz eingehen – Für Heute nehme ich mir die neue Array Syntax, die neue Klassen instanziierung und das „callable“ Type-Hinting vor. Bis zum nächsten mal werde ich mir die traits und einige weitere Features etwas genauer ansehen um auch darüber etwas schreiben zu können. Aber kommen wir nun erst mal zum wesentlichen… Neue Array Syntax Mit PHP 5.4 bekommt PHP eine verkürzte Array-Syntax spendiert, die sich stark an Javascript orientiert: // Vor PHP 5.4 $a = array(1,2,3,4); $b = array('a' => 'Apfel', 'b' => 'Birne', 'c' => 'Clementine'); // Mit PHP 5.4 $x = [1,2,3,4]; $y = ['a' => 'Apfel', 'b' => 'Birne', 'c' => 'Clementine']; Zusätzlich ist es nun (endlich) möglich, wie in Javascript, direkt auf die Inhalte von Arrays aus Funktions- oder Methodenaufrufen zuzugreifen: // Ähnlich wie bei Javascript ist nun folgende Syntax möglich: function obst() { return [ 'a' => 'Apfel', 'b' => 'Birne' ]; } // Liefert "Ein Apfel und eine Birne.". echo 'Ein ' . obst()['a'] . ' und eine ' . obst()['b'] . '.'; Durch diese neue Syntax kann man auf „temporäre“ Variablen verzichten, die man üblicherweise nur benutzt um in der nächsten Zeile auf ein Array-Element zuzugreifen… Das spart Ressourcen und Quellcode – Zwar im extrem geringen Maß, aber jedes kleine bisschen hilft 🙂 Die neue Syntax zum instanziieren von Klassen Ein weiteres neues Feature ist das direkte ansprechen von Methoden und Variablen „grade erst“ instanziierter Objekte. Auch dies kennen einige unter euch vielleicht von Javascript, wobei die Umsetzung in PHP dezent anders aussieht… // Wir sparen uns erneut eine "temporäre" Variable. $data = (new datenbank_model)->hole_daten(); Das ganze wirkt noch irgendwie fremd und vielleicht etwas fehl am Platz… Doch wenn ihr auch zu den Leuten gehört die gerne mit dem Fluent Interface arbeiten, ist das sicherlich eine interessante Sache! Neues Type-Hinting in Methodenköpfen Im letzten größeren PHP Release (Version 5.3) wurden erstmals die „Lambda“ Funktionen eingeführt – Funktionen die sich Variablen zuweisen, oder als Parameter mitgeben lassen: // Beispielhafte Lambda Funktion $quadrat = function($i) { return $i*$i; }; // Erzeugt "4". echo $quadrat(2); Es ist also schon länger möglich solche Lambda Funktionen zu nutzen und als Parameter zu übergeben – Doch es gab noch kein entsprechendes Type-Hinting, wie wir das z.B. von Arrays oder Klassen kennen. Stellen wir uns kurz vor wir haben eine Methode, die wiederum andere Methoden aufruft. Natürlich muss sichergestellt werden dass der übergebene Parameter überhaupt „aufrufbar“ (callable) ist… // Wir erstellen eine Lambda Funktion. $quadrat = function($i) { return $i*$i; }; // Und eine normale Funktion. function plus($i) { return ++ $i; } function methode_aufrufen($x) { // Bisher mussten wir händisch prüfen. if (is_callable($x)) { echo $x(2); } else { echo 'Fehler!'; } echo '<br />'; } methode_aufrufen($quadrat); methode_aufrufen('plus'); Wird folgende Ausgabe produzieren: 4 3 Um nicht immer selbst zu prüfen was wir übergeben bekommen, können wir folgendes schreiben: // Wir erstellen eine Lambda Funktion. $quadrat = function($i) { return $i*$i; }; // Und eine normale Funktion. function plus($i) { return ++ $i; } // Man beachte das "callable" Type-Hinting. function methode_aufrufen(callable $x) { echo $x(2) . '<br />'; } methode_aufrufen($quadrat); methode_aufrufen('plus'); Wird unserer methode_aufrufen Funktion ein falscher Parameter übergeben, erzeugt diese einen Fehler: PHP Catchable fatal error: Argument 1 passed to methode_aufrufen() must be callable, string given, called in [...] Folgende Möglichkeiten werden uns von PHP als „callable“ angeboten: // Array mit Klassenname/Objekt und Methode. $array = [new meine_klasse, 'methode']; $array = ['klassenname', 'methode']; // Funktionsname als String. $string = 'funktionsname'; // Lambda Funktion. $funktion = function($parameter) { /* ... */ }; Nun seid ihr dran! Holt euch die neue PHP Version selbst und spielt mit den neuen Features rum! Für alle, die XAMPP nutzen habe ich ein kleines und sehr einfaches Tutorial zum upgraden auf technoslab.blogspot.com gefunden: XAMPP upgrade to PHP 5.4. Der Eintrag ist zwar auf englisch, aber das sollte kein Hindernis sein. Ich wünsche euch viel Spaß mit den neuen Features und eine erfolgreiche Woche!
PHP war schon immer meine Lieblingssprache, aber DAS toppt echt alles. Die neuen Schreibweisen gefallen mir sehr gut und das mit dem direkten Zugriff auf zurückgegebene Arrays bzw. Objekte habe ich schon an so mancher Stelle vermisst. Das Problem ist jetzt nur, dass mein Hoster noch kein PHP 5.4 anbietet. Das dauert wohl noch bei den meisten, oder? Antworten