PHP7 Speedtest mit WordPress

Im folgenden Text möchte ich aufzeigen, welche Punkte sich im Wesentlichen geändert haben.
Weitere Punkte findest Du am Ende des Beitrages bei den weiterführenden Links.

Speed von PHP7

Ein Update auf PHP7 lohnt sich schon nur Aufgrund des Performancegewinns, der dadurch entsteht. Die Performance konnte im Vergleich zur alten PHP Version um beinahe das Doppelte verbessert werden. Komplexere Webapplikationen profitieren sogar von einer grösseren Verbesserung. WordPress ist beispielsweise fast 2,3 Mal so schnell wie unter PHP Version 5.6. In Zukunft werden wir also eine deutliche Performanceverbesserung bei Webapplikationen erleben.

Deklaration der Datentypen

In PHP7 können, wie von anderen Programmiersprachen bekannt, Datentypen explizit definiert werden. So können Fehler wie sie mit den undefinierten Datentypen passieren nicht mehr so einfach passieren. Weiter können die Parameter einer Funktion auf einen Typ definiert werden. Auch der Rückgabetyp einer Funktion kann definiert werden. Dies erhöht die Leserlichkeit des Quelltextes und forciert einen «besseren» Code. Standardmässig verursacht der Interpreter keine Fehlermeldung, falls falsche Datentypen gebraucht werden. Das kann aber in jedem File durch die Funktion declare(strict_types=1) geändert werden.

function increment(int $a): int {
    return $a + 1.0; // keine strikte Überprüfung des Returns
}
declare(strict_types=1);

function increment(int $a): int {
    return $a + 1.0; // strikte Überprüfung des Returns
}

dirname() erhält einen neuen Parameter

Mit dirname() kann der übergeordnete Ordner einer Datei abgerufen werden. Mit PHP7 ist es nun möglich einen zweiten Parameter zu übergeben, der definiert, wie viele Stufen in der Ordnerstruktur hochgegangen werden soll.

$dirname = dirname( __FILE, 4 ); // Geht 4 Stufen nach oben

Neuer Operator

Der Operator ?? überprüft, ob eine Variable gesetzt und nicht NULL ist. Die mühsame Überprüfung durch eine if() Bedingung ist daher nicht mehr nötig.

// PHP 7
$username = $_GET['user'] ?? 'nobody';

// PHP 5.x
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

Spaceship Operator

Um zwei Werte miteinander zu vergleichen, kann in PHP7 der sogenannte Spaceship Operator gebraucht werden. Früher musste dafür immer eine If-Bedingung verwendet werden. Diese Grössenüberprüfung kann auf sämtliche Datentypen angewendet werden. Beim Datentyp String wird die Position des Charakters im Alphabet verglichen.

// 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

Preg Replace Callback Array

In PHP7 wurde die neue Funktion preg_replace_callback_array zu den RegEx Funktionen hinzugefügt. So kann ein String auf eine Reihe von Regulären Ausdrücken überprüft werden und nicht wie vorher immer nur auf einen Ausdruck.

$subject = 'Aaaaaa Bbb';

preg_replace_callback_array(
    [
        '~[a]+~i' => function ($match) {
            echo strlen($match[0]), ' matches for "a" found', PHP_EOL;
        },
        '~[b]+~i' => function ($match) {
            echo strlen($match[0]), ' matches for "b" found', PHP_EOL;
        }
    ],
    $subject
);

// Gibt "6 matches for "a" found" aus
// Gibt "3 matches for "b" found" aus

Security

Die bis anhin existierende Sicherheitslücken mit der Funktion unserialize wurden behoben. Bei dieser sogenannten PHP Object Injection konnte sich ein Angreifer kompletten Zugriff auf das System verschaffen. Diese Schwachstelle wurde in PHP7 minimert.

Fazit

Der Einsatz von PHP7 lohnt sich durchwegs. Zudem läuft die neuste Version sehr stabil und kann produktiv eingesetzt werden. Unsere Hosting werden in der Zukunft migriert. Weitere Informationen zu PHP und PHP7 unter folgenden, weiterführenden Links: