Das PHP-Entwicklerteam hat die erste Betaversion zu PHP 7.4 veröffentlicht. Damit stehen die Features fest. PHP 7.4beta1 bringt neben neuen Deprecations auch einige BugFixes mit. Wir schauen auf die Änderungen der neuen Version.
PHP 7.4beta1 mit neuen Deprecations
Bisher ermöglichte PHP, dass sowohl eckige Klammern als auch geschweifte Klammern austauschbar für den Zugriff auf Array-Elemente und String Offsets verwendet werden konnten. Ein Beispiel aus dem PHP RFC aus den PHP-Internals zur Veranschaulichung:
$array = [1, 2]; echo $array[1]; // prints 2 echo $array{1}; // also prints 2
$string = "foo"; echo $string[0]; // prints "f" echo $string{0}; // also prints "f"
Das führte teils zu Verwirrungen und Problemen. Beispielsweise konnten bisher geschweifte Klammern nicht verwendet werden, um ein Element in einen Array zu schreiben:
$array[] = 3; echo $array[2]; // prints 3 $array{} = 3; // Parse error: syntax error, unexpected '}'
Auch die Erstellung eines Arrays war mit der geschweiften Klammer-Syntax nicht möglich:
$array = [1, 2]; // works $array = {1, 2}; // Parse error: syntax error, unexpected '{'
Eine Verwendung für eine Listenzuordnung gestaltete sich ebenfalls schwierig:
[$one, $two] = $array; // works {$one, $two} = $array; // Parse error: syntax error, unexpected ','
Aufgrund dessen wird die Syntax der geschweiften Klammern bei der Verwendung von Arrays oder String Offsets mit der erschienenen Beta nun als deprecated markiert und somit nicht mehr für die Nutzung empfohlen.
PHP 7.4beta 1 bringt weitere Deprecations mit, über die das PHP-Entwicklerteam erst in der vergangenen Woche abgestimmt hat (wir haben berichtet). Die dort aufgeführten 14 Methoden werden in PHP 7.4 als veraltet markiert:
- The real type
- Magic quotes legacy
- array_key_exists() with objects
- FILTER_SANITIZE_MAGIC_QUOTES filter
- Reflection export() methods
- mb_strrpos() with encoding as 3rd argument
- implode() parameter order mix
- Unbinding $this from non-static closures
- hebrevc() function
- convert_cyr_string() function
- money_format() function
- ezmlm_hash() function
- restore_include_path() function
- allow_url_include ini directive
In PHP 7.4beta1 werden alle genannten Methoden nicht mehr zur Nutzung empfohlen und in Version 8.0 endgültig entfernt.
BugFixes in PHP 7.4beta1
Neben den genannten Deprecations hält die Betaversion auch einige Bugfixes bereit. Gemäß der Release Note kam es im built-in webserver zu einem Segmatation Fault. Dieses Problem soll mit der vorliegenden Beta behoben worden sein.
Ein weiteres Problem trat auf, wenn PHP über ein CGI ausgeführt wurde. PHP versuchte nach einem Shebang (#!) zu suchen. Trat in der ersten Zeile ein Hash-Zeichen auf, prüfte PHP nicht, ob das folgende Zeichen ein Ausrufezeichen ist und somit eine Kombination aus einem Hash- und einem Ausrufezeichen (#!). PHP übersprang laut Bug-Report die entsprechende Zeile und ignorierte den PHP-Code.
Test script: --------------- # Second line. Expected result: ---------------- X-Powered-By: PHP/5.3.3-7+squeeze3 Content-type: text/html #Hello World Second line. Actual result: -------------- X-Powered-By: PHP/5.3.3-7+squeeze3 Content-type: text/html Second line.
Des Weiteren gab es den Bug, dass PHP das erste Byte eines Programms verschluckt hat, wenn dieses aus einer Prozess Substitution stammte (Bug #78066). Mit der ersten Beta soll dieser Bug behoben worden sein. Nähere Informationen über die aktuelle Version können der Release Note entnommen werden.
Auf beta1 folgt beta2
PHP 7.4 ist für den 28. November geplant. Nach der nun veröffentlichten ersten Beta soll PHP 7.4beta2 am 08. August 2019 erscheinen. Der Timetable zu PHP 7.4 findet sich im PHP-Wiki.