Facebook
Twitter
Google+
Kommentare
0

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:

  1. 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.

  2. 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'];
  3. Nun sind Methodenaufrufe direkt nach dem Constructor möglich, also ein Fluent Interface:
    echo (new Auto())->getName();
  4. 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();
    }
  5. 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'];
  6. Native Binärzahlen kommen (wer sie braucht)
    <?
    $x = 0b001110;
    echo $x;
  7. 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'}();
  8. $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.
  9. 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
  10. Zugriff auf den Upload Progress ohne Extension. Details siehe Artikel bei Johannes oder im PHP Manual.
  11. E_ALL enthält nun E_STRICT
  12. Ein kleiner eingebauter Webserver für Tests und Entwicklungsumgebungen. Ich hatte ja bereits hier im Blog darüber geschrieben.
  13. <?= ist nun immer verfügbar, auch wenn short_open_tag ausgeschaltet ist
  14. Wenn ein Array automatisch in einen String gecastet wird (“Array”) gibt es nun eine Notice
  15. “default_charset” php.ini Einstellung von ISO-8859-1 auf UTF-8 gesetzt
  16. 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.

Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen