Willkommen zurück! Ich melde mich mit interessanten Neuigkeiten zur Zukunft von PHP: Am 26.November soll die erste finale PHP 7 Version veröffentlicht werden (siehe PHP wiki). Von Juni bis jetzt gab es ganze 12 Pre-Releases (Alpha, Beta und RC) – und nach einer kurzfristigen Verzögerung ist es nun bald soweit!
In diesem ersten Teil präsentiere ich euch einige der neusten Features, die mit PHP 7 eingebaut werden 😉 Die weiteren Neuerungen gibt es dann im nächsten Eintrag – Versprochen!

Moment… PHP 7? Was ist mit 5.7 und 6?
Diese Frage möchte ich nur kurz beantworten – ich bin sicher es lassen sich im Internet genügend Seiten finden auf denen die ganze Story zu lesen ist
TL;DR – viele der ursprünglichen Features für PHP 6 sind bereits in 5.3 und 5.4 eingeflossen. Die „Version 6“ ist mit viel hin- und her verbunden und soll letztendlich vergessen werden. Man kann sich das ähnlich denken wie beim Sprung von Windows 8 auf 10 (mal von den technischen Hintergründen abgesehen).

Die PHP 7 Features im Überblick
PHP wird immer schneller, besser und überhaupt ist alles super. In Fakten bedeutet das: Bis zu zwei mal schneller als PHP 5.6, konsistenter 64bit Support, viele Fatale Fehler sind nun Exceptions und noch vieles mehr:

  • Strikter Modus – Was wir schon von Javascript kennen wird zukünftig auch in PHP verfügbar sein. Mit Hilfe einer einfachen Zeile kann verhindert werden das Datentypen on-the-fly geändert werden. Der Strikte Modus beeinflusst aber auch einige der neuen Features (im Bezug auf Typensicherheit).
    declare(strict_types=1);
  • Typensicherheit von Skalaren Werten in Funkions- und Methodenköpfen – Was bisher mit Arrays und Objekten möglich war soll auch mit Skalaren Werten (Integer, String, Float und Boolean) funktionieren. Die Syntax sollte einem entsprechend bekannt vorkommen.
    function (int $integer, string $string, float $float, bool $boolean) { ... }
  • Rückgabe Typen definieren – Dieses Feature kennen einige bestimmt schon aus anderen Programmiersprachen: Man wird mit PHP 7 definieren können das Funktionen und Methoden nur noch bestimmte Typen zurückliefern. Hier werden die gleichen Typen wie bei den Parametern verfügbar sein, die Syntax ist allerdings neu:
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    function arraysSum(array ...$arrays): array
    {
        return array_map(function(array $array): int {
            return array_sum($array);
        }, $arrays);
    }
  • Der neue „Null coalesce“ Operator: ?? – Ähnlich wie der ternäre Operator ?: funktioniert der Null coalesce Operator in Verbindung mit isset().
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    $username = $_GET['user'] ?? 'nobody';
    // This is equivalent to:
    $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
    
    // Coalesces can be chained: this will return the first defined value out of $_GET['user'], $_POST['user'], and 'nobody'.
    $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
  • Der „Spaceship“ Operator: <=> – Dieser Operator kann verwendet werden um zwei Ausdrücke miteinander zu vergleichen. Er bedient sich dabei der Logik der üblichen Vergleichsoperatoren. Mögliche Ergebnisse sind -1 für „kleiner als“, 0 für „gleich“ und 1 für „größer als“.
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    // Integers
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1
    
    // Floats
    echo 1.5 <=> 1.5; // 0
    echo 1.5 <=> 2.5; // -1
    echo 2.5 <=> 1.5; // 1
     
    // Strings
    echo "a" <=> "a"; // 0
    echo "a" <=> "b"; // -1
    echo "b" <=> "a"; // 1
  • Arrays Konstanten – Hierbei handelt es sich um eine Sinnvolle Erweiterung der Konstanten!
    define('EXAMPLE', ["a", "b", "c"]);
    
    echo EXAMPLE[1]; // Meldet "b"
  • Anonyme Klassen – Was wir bisher nur von (Lambda-) Funktionen kannten ist nun auch mit Klassen möglich. Grade für moderne Frameworks und Dependency Injection dürfte dieses Feature ganz interessant sein! Die Syntax ist eigentlich recht selbsterklärend:
    // Code-Beispiel von http://php.net/manual/en/migration70.new-features.php
    interface Logger {
        public function log(string $msg);
    }
    
    class Application {
        private $logger;
    
        public function getLogger(): Logger {
             return $this->logger;
        }
    
        public function setLogger(Logger $logger) {
             $this->logger = $logger;
        }
    }
    
    $app = new Application;
    $app->setLogger(new class implements Logger {
        public function log(string $msg) {
            echo $msg;
        }
    });
    
    var_dump($app->getLogger()); // Meldet "object(class@anonymous)#2 (0) { }"
  • Unterstützung für Unicode Codepoints Syntax – Unicode Codepoints (in Hexadezimaler Form) werden korrekt in UTF-8 ausgegeben.

Wie wir sehen gibt es EINIGE Dinge die sich mit PHP 7 ändern aber das war noch nicht alles! Ich werde die restlichen Neuerungen in einem weiteren Posting veröffentlichen! Es lohnt sich also bald wieder reinzuschauen 😉
Bis dahin wünsche ich euch natürlich Happy Coding!

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

Schreibe einen Kommentar

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