Willkommen zurück! Wie versprochen gibt es Heute den zweiten Teil der neuen Features und Funktionen von PHP 7. Den ersten Teil findet ihr hier! Inzwischen sind es nur noch wenige Tage bis das finale Release freigegeben wird (26.Nov laut dem PHP Wiki) – es wird spannend!

Die restlichen Features von PHP7
Ohne weitere Verzögerung möchte ich euch die restlichen neue Features und Funktionen des kommenden Major Releases auflisten:

  • Closure::call() – Dies ist eine kürzere und schnellere Methode um Objekte an Closures zu binden.
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    class A {private $x = 1;}
    
    // Pre PHP 7 code
    $getXCB = function() {return $this->x;};
    $getX = $getXCB->bindTo(new A, 'A'); // intermediate closure
    echo $getX();
    
    // PHP 7+ code
    $getX = function() {return $this->x;};
    echo $getX->call(new A);
  • Filter für unserialize() – Es wird über einen zweiten (optionalen) Parameter möglich sein ein Array mit „allowed_classes“ Schlüssel als Filter mitzugeben. Anhand dessen wird beim de-serialisieren entschieden welche Klassen wiederhergestellt werden und welche nicht.
  • Neue IntlChar Klasse – Diese neue Klasse und deren statische Methoden können dazu genutzt werden Informationen über Unicode Zeichen zu erlangen. Hierfür muss die Intl Extension installiert sein.
  • use statement gruppieren – Man kann mit PHP 7 mehrere Namespaces in einer einzelnen Zeile einbinden. Die Syntax ist hier etwas ungewöhnlich.
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    // Pre PHP 7 code
    use some\namespace\ClassA;
    use some\namespace\ClassB;
    use some\namespace\ClassC as C;
    
    use function some\namespace\fn_a;
    use function some\namespace\fn_b;
    use function some\namespace\fn_c;
    
    use const some\namespace\ConstA;
    use const some\namespace\ConstB;
    use const some\namespace\ConstC;
    
    // PHP 7+ code
    use some\namespace\{ClassA, ClassB, ClassC as C};
    use function some\namespace\{fn_a, fn_b, fn_c};
    use const some\namespace\{ConstA, ConstB, ConstC};
  • Generatoren können Rückgaben machen – Anstatt von yield können Generatoren jetzt via return einen „finalen“ Datensatz zurückzuliefern.
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    $gen = (function() {
        yield 1;
        yield 2;
    
        return 3;
    })();
    
    foreach ($gen as $val) {
        echo $val, PHP_EOL;
    }
    
    echo $gen->getReturn(), PHP_EOL;
    // Meldet "1", "2" und "3"
  • Generatoren können an andere Generatoren delegieren – Mit dem Schlüsselwort „from“ können Generatoren nun an andere Generatoren delegieren und somit Ausgaben zusammenführen. Ich persönlich habe Generatoren übrigens noch gar nicht benutzt 🙂
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    function gen()
    {
        yield 1;
        yield 2;
        yield from gen2();
    }
    
    function gen2()
    {
        yield 3;
        yield 4;
    }
    
    foreach (gen() as $val)
    {
        echo $val, PHP_EOL;
    }
    // Meldet "1", "2", "3" und "4"
  • Neue Funktion intdiv() für integer division
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    var_dump(intdiv(10, 3)); // Meldet "3"
  • Session Optionensession_start() akzeptiert nun ein Array mit Optionen. Dadurch können die Session-Spezifischen Einstellungen der php.ini überschrieben werden.
  • Neue Funktion für Reguläre Ausdrücke preg_replace_callback_array() – Diese Funktion nimmt ein assoziatives Array an, in deren Schlüssel die Reguläreren Ausdrücke stehen. Als Inhalte werden Lambda-Funktionen übergeben die das Ergebnis verarbeitet
    // Code-Beispiel von http://php.net/manual/en/function.preg-replace-callback-array.php
    $subject = 'Aaaaaa Bbb';
    
    preg_replace_callback_array(
        [
            '~[a]+~i' => function ($match) {
                echo strlen($match[0]), ' matches for "a" found', PHP_EOL;
            },
            '~[b]+~i' => function ($match) {
                echo strlen($match[0]), ' matches for "b" found', PHP_EOL;
            }
        ],
        $subject
    );
  • Zwei neue CSPRNG Funktionen – PHP 7 führt random_bytes() und random_int() eion um kryptografisch-sichere Integer und Strings zu generieren.
  • list() kann nun ArrayAccess Objekte verarbeiten – Das altbekannte list() Konstrukt kann nun mit ArrayAccess Objekten umgehen. Dafür können aber keine Strings mehr verarbeitet werden – dafür soll str_split() benutzt werden.

Und damit wären wir auch schon durch mit der Liste! Ganze zehn Tage noch, dann kommen wir in den Genuss der neuen PHP Version. Natürlich kann man sich auch einfach den aktuellsten Release Candidate (RC7) installieren – aber ich warte lieber auf das fertige Produkt.
Ich kann leider nicht sagen wie bald ich mit neuen Beiträgen um die Ecke komme – mir fehlt es derzeit einfach an Zeit… Ich würde allerdings gerne Themen wie z.B. Composer, Doctrine, Propel, Phalcon und Windwalker ansprechen… Leider sind das keine Frameworks/Tools in die man sich „mal eben“ einarbeitet 😉

Schaut ab und zu vorbei oder abonniert den RSS Feed – dann bleibt ihr immer informiert!

Bis dahin wünsche ich euch eine angenehme Woche und natürlich Happy Coding!

One comment on “PHP 7 – Neue Features und Funktionen (2/2)

Schreibe einen Kommentar

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