12. November 2015 | 1 Comment 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!