saftmeister
Nutze den Saft!
Ich hatte bereits einen Ausblick auf PHP 5.5 geschrieben, jetzt kommt PHP 7 dran.
PHP 7 ist ein neues Major Release, das bedeutet, jede Menge neue Features, abschneiden von alten Zöpfen und was sich sonst noch geändert hat.
Eines Vorweg: PHP 7 wird doppelt!!! so schnell laufen wie PHP 5.6. Schon das allein sollte Grund genug sein, auf die neue Version zu wechseln. Doch zunächst, was nicht mehr funktioniert:
Veraltet gekennzeichnet:
Was wurde geändert:
Dieses Verhalten gilt sowohl für Variablen als auch Funktionsaufrufe.
In zweiten Teil dieses Threads gibt es noch mehr neues.
PHP 7 ist ein neues Major Release, das bedeutet, jede Menge neue Features, abschneiden von alten Zöpfen und was sich sonst noch geändert hat.
Eines Vorweg: PHP 7 wird doppelt!!! so schnell laufen wie PHP 5.6. Schon das allein sollte Grund genug sein, auf die neue Version zu wechseln. Doch zunächst, was nicht mehr funktioniert:
- (Short-)Tags wurden entfernt. Die Erkennung für die Tags <% und <script language="php"> wurde entfernt.
- Die Erweiterung ereg wurde entfernt, statt dessen die preg-Extension verwenden.
- Die Erweiterung mysql wurde nun endlich entfernt, statt dessen PDO oder MySQLi verwenden.
- Funktion split() wurde entfernt, statt dessen sollte nun explode() verwendet werden.
- Warnung entfernt, wenn date.timezone nicht gesetzt ist. Standard für diese Einstellung ist schon seit jeher UTC.
Veraltet gekennzeichnet:
- PHP4-Konstruktoren sind als veraltet gekennzeichnet. Klassen-Methoden, die als Namen den der Klasse verwenden, sind in PHP7 noch als Konstruktoren verwendbar - zusätzlich zu __construct(). In PHP 8 werden diese Funktionen nicht mehr als Konstruktoren anerkannt.
Was wurde geändert:
- Es wurde die Uniform Variable Syntax eingeführt. Die Reihenfolge in der eingebettete Variablennamen-Auflösungen durchgeführt werden, ist jetzt links-nach-rechts. In PHP 5.6 und früher war dies rechts-nach-links. Beispiel:
PHP 5.6: $a->$b['c'] => zuerst wird $b['c'], danach das Ergebnis davon an $a-> angehängt.
PHP 7: Zuerst wird $a->$b aufgelöst, danach das Ergebnis mit ['c'] komplettiert.
Um dieses Verhalten wieder auf den alten Zustand zu bringen, ist das Setzen von geschweiften Klammern notwendig.PHP 7: Zuerst wird $a->$b aufgelöst, danach das Ergebnis mit ['c'] komplettiert.
Dieses Verhalten gilt sowohl für Variablen als auch Funktionsaufrufe.
- T_PAAMAYIM_NEKUDOTAYIM gibt es nicht mehr wirklich, eingebettete Funktionsaufrufe (zB. Funktionsnamen in Variablen mit anschließender Parameter-Liste wirft diesen Fehler nun nicht mehr. Beispiel:
PHP:
// Funktioniert auch in PHP 5.6
$a = "sprintf";
echo $a("%d\n", 5);
// Funktioniert ab PHP 7
function a()
{
return "sprintf";
}
echo a()("%d mal fump", 7);
- Mehrfache default-Fälle in switch führen nun zu einem fatalen Fehler.
- Engine Exceptions eingeführt; Sog. Recoverable Errors, Warnings und Notices führen jetzt zu einer entsprechenden Exception, die abgefangen und behandelt werden kann. E_CORE_ERROR, E_COMPILE_ERROR und E_PARSE werden (zunächst) nicht als Exceptions verfügbar sein.
- Throwable Interface wird eingeführt. Da die zuvor genannten neuen Exceptions nicht von der Klasse "Exception" ableiten, sondern von einer neuen Klasse "BaseException", wird eine Schnittstelle notwendig, um alle Exception-Typen unter einem Begriff zusammen zu fassen.
- Zufallsfunktionen für den täglichen Gebrauch; Es sind zwei neue Funktionen eingebaut, mit denen man einen zufälligen String (random_bytes()), sowie eine zufällige Zahl aus einem vorgegebenen Bereich (random_int()) generieren lassen kann.
- Anonyme Klassen werden eingeführt. Eine anonyme Klasse ist eine solche, welche direkt zur Laufzeit generiert und ein Objekt daraus erzeugt wird. Dies kann insbesondere für Callbacks angewendet werden.
- Diverse neu reservierte Schlüsselworte
- Datentypen für skalare Werte; Einfache Datentypen, wie String, Integer, Float, etc. können nun über einen strikten Modus erzwungen werden, bei dem eine Exception geworfen wird, wenn der übergebene Wert nicht dem erwarteten Typen entspricht.
In zweiten Teil dieses Threads gibt es noch mehr neues.