28. Januar 2014 | 2 Comments Hallo zusammen, es ist wieder so weit: Ein neues PHP Major Release wurder veröffentlicht (wenn auch als Alpha). Heute möchte ich kurz auf die neuen Features und angepassten Funktionen eingehen… Unter anderem gibt es „constant scalar expressions“, „variadic functions“, „argument unpacking“ und einige weitere 🙂 Genaueres erfahrt ihr auf der offiziellen PHP Seite oder hier! Hey, neue Features? Ganz richtig – das neue Alpha Release bringt ein paar neue Features, einige Bugfixes und auch sowohl angepasste als auch neue Funktionen mit. Das ganze möchte ich euch kurz vorstellen. Features Als erstes möchte ich auf die neuen Features eingehen – bitte beachtet, das ich die Code-Beispiele 1:1 von php.net übernommen habe. Die Beschreibung ist teilweise frei aus dem englischen übersetzt. Constant scalar expressions ermöglichen uns einfache Rechenoperationen so wie Stringverkettungen an Stellen, wo vorher statische Werte erwartet wurden. Beispielsweise beim definieren von Konstanten, Klassen Attributen oder Standardwerten für Funktionen: const ONE = 1; const TWO = ONE * 2; class C { const THREE = TWO + 1; const ONE_THIRD = ONE / self::THREE; const SENTENCE = 'The value of THREE is '.self::THREE; public function f($a = ONE + self::THREE) { return $a; } } echo (new C)->f()."\n"; echo C::SENTENCE; Dieser Quelltext wird unter PHP 5.6 folgendes ausgeben 4 The value of THREE is 3 Variadic functions via „...„ ermöglichen es uns auf eine beliebige Anzahl an Funktionsparametern zuzugreifen, ohne auf Funktionen wie z.B. „func_get_args()“ zurückgreifen zu müssen: function f($req, $opt = null, ...$params) { // $params is an array containing the remaining arguments. printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3); f(1, 2, 3, 4); f(1, 2, 3, 4, 5); Argument unpacking via "..." bringt uns quasi die andere Seite der Variadic functions. Dabei wird einer Funktion ein Array oder Traversable-Objekt übergeben, welches dann auf die Parameter der Funktion gemappt werden:function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators); Es ist nun möglich über use function und use const Funktionen und Konstanten aus anderen Namespaces zu importieren: namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; f(); } Ein interaktiver Debugger phpdbg kann mit PHP 5.6.0 verwendet werden. Mehr Informationen zum SAPI Modul findet ihr hier. Dateien mit einer Größe von über 2 Gigabyte können hochgeladen werden. Geänderte und neue Funktionen Natürlich möchte ich euch auch einen kurzen Einblick in die geänderten und neuen Funktionen geben... Bitte beachtet, das ich hier nicht alle Funktionen vorstelle. Für eine komplette Liste schaut bitte in das php.net Changelog. Die Funktion json:decode() wird strikter: Ab PHP 5.6.0 wird die Funktion invalides JSON melden, wenn true, false oder null nicht komplett Lowercase sind (Auch Mischformen werden nicht länger geduldet). crypt() triggert einen E_NOTICE Fehler, wenn der salt Parameter nicht übergeben wird. XMLReader::getAttributeNs() und XMLReader::getAttributeNo() liefern null zurück, wenn das angeforderte Attribut nicht gefunden werden konnte (genau wie XMLReader::getAttribute()). Die neue Methode ZipArchive::setPassword() erlaubt es ZIP Dateien mit einem Passwort zu versehen. Und mit diesen Infos möchte ich mich für diese Woche von euch verabschieden! Ich schätze nächste Woche geht es wieder zurück zur "User-Experience"... Alternativ habe ich noch einen Eintrag zur HTML5 History API in petto. Schaut also auch nächste Woche wieder rein - bis dahin wünsche ich euch angenehme Tage und natürlich Happy Coding!