PHP 5.4.0 released! Neue Funktionen
Soeben wurde PHP 5.4.0 released! Nach 8 Release Candidates ist nun die finale Version erschienen und kann auf php.net heruntergeladen werden. Ich habe 2 meiner größeren Applikationen bereits mit der neuen Version getestet (mit dem RC8, der gleich der finalen Version ist). Sobald DotDeb die neue Version released wird der Server upgedated.
So, hier eine Übersicht der wichtigsten Änderungen:
- Das wohl größte Feature: Traits (auch “Horizontal Reuse” renannt). Hier im Blog gibt es auch schon einen sehr ausführlichen Artikel über Traits.
<? class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello();
Weitere Details und Beispiele zu Traits gibt es in diesen Blogartikeln.
- Auf das nächste Feature habe ich schon einige Jahre gewartet, endlich kommt es: Array-Dereferenzierung!
<? function autos () { return array('a' => 'audi', 'b' => 'bmw'); } echo autos()['a'];
- Nun sind Methodenaufrufe direkt nach dem Constructor möglich, also ein Fluent Interface:
echo (new Auto())->getName();
- Neuer Typehint “callable“, der Parameter muss also “irgendwie aufrufbar” sein, sprich ein Funktionsname, ein Array mit Klassennamen und statischem Methodennamen, oder ein Array mit Objekt und Methodennamen. Details siehe is_callable()
<? function doSomething(callable $cb) { $cb(); }
- Die Short Array Syntaxkommt! Ob ich sie mag weiß ich noch nicht so ganz, man spart sich einfach 5 Zeichen. Aber immerhin hat man dann in Javascript bzw. JSON die gleiche Syntax.
<? $a = [1, 2, 3]; $b = ['key1' => 'value1', 'key2' => 'value2'];
- Native Binärzahlen kommen (wer sie braucht)
<? $x = 0b001110; echo $x;
- Mehr Flexibilität bei variablen Methodenaufrufen: Class::{expr}()
<? class ClassA { public function doSomething() { echo "something\n"; } } $method = 'doSomething'; $classA = new ClassA(); $classA->doSomething(); $classA->$method(); $classA->{'doSomething'}(); ClassA::doSomething(); ClassA::$method(); ClassA::{'doSomething'}();
- $GLOBALS ist nun eine Just-In-Time (JIT) Variable. Andere würden es “lazy initialisation” nennen. Sie wird also erst initialisiert wenn sie das erste Mal benutzt wird, man gewinnt also eventuell etwas Performance wenn man es nicht nutzt.
- Die Performance des Silence-Operators wurde etwas verbessert:
<? for ($i=0; $i<1000000; $i++) { $x = @file_get_contents('/etc/passwdff'); echo $x; }
PHP 5.3.9 real 0m4.134s user 0m3.244s sys 0m0.884s PHP 5.4 RC6 real 0m3.050s user 0m2.176s sys 0m0.872s
- Zugriff auf den Upload Progress ohne Extension. Details siehe Artikel bei Johannes oder im PHP Manual.
- E_ALL enthält nun E_STRICT
- Ein kleiner eingebauter Webserver für Tests und Entwicklungsumgebungen. Ich hatte ja bereits hier im Blog darüber geschrieben.
- <?= ist nun immer verfügbar, auch wenn short_open_tag ausgeschaltet ist
- Wenn ein Array automatisch in einen String gecastet wird (“Array”) gibt es nun eine Notice
- “default_charset” php.ini Einstellung von ISO-8859-1 auf UTF-8 gesetzt
- Und noch einige weitere Performance- sowie Speicheroptimierungen und Bugfixes.
Einige Dinge wurden nun auch endgültig entfernt:
- Bei break und continue kann nun nicht mehr eine Variable genutzt werden um die Anzahl der Schleifenabbrüche zu definieren.
- Die seit PHP 5.3 als DEPRECATED markierten Safe-Mode-Funktionen sowie alle php.ini Variablen wurden entfernt.
- Magic Quotes (magic_quotes_gpc) wurden entfernt!
- Endlich wurden register_globals und register_long_arrays aus der php.ini entfernt.
- Die Einstellung allow_call_time_pass_reference wurde entfernt.
CHANGELOG + NEWS + Migrationshilfe von 5.3 nach 5.4
Habe ich etwas wichtiges vergessen? Welche Änderung findet ihr am herausragendsten?
Keine ähnlichen Artikel.