PHP 7 – Warum Sie jetzt updaten sollten
Bereits seit Anfang des Jahres steht PHP 7 – die neueste Version der beliebten Skriptsprache – allen EUserv Webspace-Tarifen mit PHP-Unterstützung zur Verfügung. Damit hat die von den meisten Webseitenbetreibern genutzte Version PHP 5.x nach 11 langen Jahren einen würdigen Nachfolger gefunden. Mit diesem Release ist die Skriptsprache nun vor allem schneller (PHP 7 ist etwa doppelt so schnell wie PHP 5.6 und 14mal schneller als PHP 5.0) und gleichzeitig sparsamer im Speicherverbrauch.
Dieser deutlich spürbare Geschwindigkeitsgewinn ist sicher das Hauptargument, um die eigenen Webprojekte sobald wie möglich auf PHP 7 umzustellen. Darüber hinaus liefern jedoch einige weitere neue Funktionen und Änderungen gute Gründe für ein Update:
#1 – Skalare Typendeklarationen
Bei den Parametern von Funktionen/Methoden kann mit dem erweiterten Type-Hinting «Scalar type declarations» in PHP 7 angegeben werden, dass man einen Integer, einen Float, einen String oder einen Booleschen Wert erwartet. In PHP 5-Versionen war das bisher nur für Objekte und Arrays möglich.
Beispiel:
<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
int(9)
#2 – Typ des Rückgabewertes deklarieren
Bei der Deklaration von Funktionen/Methoden oder Closures mit dem erweiterten Type-Hinting «Return type declarations» können Sie die Art des Rückgabewerts bestimmen. Um die automatische Typumwandlung zu verhindern, wechseln Sie in den Strict-Modus.
Beispiel:
<?php
function arraysSum(array ...$arrays): array
{
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array ( [0] => 6 [1] => 15 [2] => 24 )
#3 – Änderungen im Error-Handling (Fehler und Exceptions)
Diese, auf den ersten Blick unspektakuläre Änderung hat es in sich: Alle fatalen Fehler aus früheren PHP-Versionen, wie beispielsweise der ehemals fatale Fehler „Call to a member function ?() on a non object“, sind in PHP 7 Exceptions und werden nun abgefangen, ohne für einen sofortigen Programmabbruch zu sorgen. Dazu zählen auch Laufzeitfehler, die in PHP 7 über das neue Interface Throwable oder die Basisklasse Error abgefangen werden können.
#4 – Neue Operatoren
Mit PHP 7 halten die zwei neuen Operatoren Einzug. Bereits in früheren PHP-Versionen wurde der Ternary-Operator (shorthand ternary) „?“ eingeführt der den Wert auf der linken Seite zurück gibt, wenn er PHPs Interpretation von wahr entspricht, ansonsten den Wert auf der rechten Seite.
Häufig bedarf es in PHP aber eines Operators, der überprüft, ob der Wert auf der linken überhaupt gesetzt ist, ohne dabei einen Fehler auszulösen. Dafür wurde nun der „Null coalescing operator“ „??“ eingeführt, der den Wert auf der linken Seite zurückgibt, wenn er gesetzt ist und sonst den Wert auf der rechten Seite des Operators.
Beispiel:
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
Neu hinzu kommt außerdem der sogenannte „Spaceship Operator“ <=>, der die Erstellung von Vergleichsfunktionen vereinfacht. Der Operator gibt -1 zurück, wenn der linke Wert kleiner ist als der rechte, 0 wenn beide gleich sind und sonst +1. Damit lassen sich Daten sehr einfach mittels der existierenden Sortierfunktionen vergleichen.
Beispiel:
<?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
?>
#5 – Neuerungen bei den Generatoren
Zwei Neuerungen betreffen die in PHP 5.5 eingeführten Generatoren: Sie können nun innerhalb eines Generators einen Rückgabewert („return“) zurückgeben lassen und außerdem Operationen an einen anderen Generator o. Ä. mit „yield from“ delegieren.
Beispiel „return“:
<?php
$gen = (function() {
yield 1;
yield 2;
return 3;
})();
foreach ($gen as $val) {
echo $val, PHP_EOL;
}
echo $gen->getReturn(), PHP_EOL;
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
1 2 3
Beispiel „yield from“:
<?php
function gen()
{
yield 1;
yield 2;
yield from gen2();
}
function gen2()
{
yield 3;
yield 4;
}
foreach (gen() as $val)
{
echo $val, PHP_EOL;
}
?>
1 2 3 4
#6 – Weitere Funktionen und Veränderungen
Zusätzlich zu den genannten Features gibt es viele weitere Änderungen, wie zum Beipsiel Unterstützung für Unicode mit UTF-8, Vereinheitlichungen im Variablen-Handling, 64bit-Unterstützung für Windows und die Nutzung anonymer Klassen.
Beispiel anonyme Klassen:
<?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());
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(class@anonymous)#2 (0) { }
Fazit
Weil sich das prinzipielle Verhalten der Sprache PHP kaum geändert hat, laufen die meisten Anwendungen wie WordPress und Drupal ohne Änderungen unter PHP 7. Die notwendigen Anpassungen bei Anwendungen, die vorher schon mit aktuellen PHP-Versionen lauffähig waren, halten sich in Grenzen. Lediglich bei „Altlasten“ wie ASP tags (<%) und Script-Tags (<script language=php>) und bereits als „deprecated“ markierten Extensions und Funktionen wie ext/mysql und ext/ereg ist Handlungsbedarf notwendig, da diese in PHP 7 nicht länger unterstützt werden.
Wer also seinen Code jetzt auf PHP 7 vorbereitet, beispielsweise also von mysql_*-Funktionen befreit, profitiert von einem stressfreien Umstieg spätestens zum Ende diesen Jahres.
DENN: PHP 5.6 wird das letzte Release von PHP 5 bleiben und nur noch bis zum 28. August 2016 unterstützt bzw. bis zum 28. August 2017 mit Sicherheitsupdates versehen. Demzufolge sollten alle Anwendungsentwickler im Laufe des Jahres 2016 sicherstellen, dass ihre Software auf PHP 7 läuft, zumal sich durch ein einfaches Upgrade auf PHP 7 die Performance der eigenen Anwendungen deutlich steigern und die CPU- und Speicherauslastung auf den Servern senken lässt.
Die Umstellung der PHP-Version kann für den gesamten bei EUserv gehosteten Webspace global im EUserv Kundencenter mittels „PHP-Konfigurator“ vorgenommen werden.
EUserv wünscht Happy Coding!
Tags: , anonyme Klassen, Features, Funktionen, Generatoren, Operatoren, PHP7, Skriptsprache, Webspace