Die Existenz von Variablen im PHP-Code beachten

Je nach Konfigurationseinstellung error_reporting() verursacht die Verwendung nicht existenter Variablen keine Fehlermeldung bzw. keine Ausgabe einer Notiz (englisch: „Notice”) beim Ausführen des entsprechenden PHP-Codes im Browser. Das ändert jedoch nichts an der Tatsache, dass es wertvolle Ausführzeit und damit Performance kostet, wenn PHP beim Interpretieren Ihres Codes eine Variable verarbeiten soll, der zuvor kein Wert zugewiesen wurde.

Mit drei einfachen Beispiel-Scripten möchten wir demonstrieren, dass die einfache Überprüfung der Existenz einer Variablen mit isset() oder das Zuweisen eines leeren Strings die Performance gegenüber der Verwendung nicht existenter Variablen deutlich verbessern können. Diese Optimierungs-Tipps beziehen sich natürlich nur auf Variablen, deren Existenz aus logischen Gründen nicht 100%ig sicher ist.

Ausgabe undefinierter Variable mit echo

<?php
for ($i = 0;$i < 10000;$i++) {
    echo $test;
}
?>

Erläuterung:
In einer 10.000mal durchlaufenen for()-Schleife wird die zuvor nicht definierte Variable $test mittels des echo-Konstrukts ausgegeben. Je nach error_reporting()-Level verursacht die Ausführung des Codes 10.000 Hinweise wie Notice: Undefined variable: test in /pfad/php-performance-verbessern-existenz-von-variablen.php on line 3.

Überprüfung mit isset()

<?php
for ($i = 0;$i < 10000;$i++) {
    if (isset($test)) {
        echo $test;
    }
}
?>

Erläuterung:
Die $test-Variable ist auch in diesem Beispiel-Script nicht definiert. Anders als im vorangegangenen Code wird die Variable jedoch nicht mit echo ausgegeben, da die vorangestellte Überprüfung mit isset() erfolglos ist und false zurück liefert.

Leeren String zuweisen

<?php
$test = "";
for ($i = 0;$i < 10000;$i++) {
    echo $test;
}
?>

Erläuterung:
Der Vergleich zu den beiden ersten Scripten „hinkt” etwas, da unsere $test-Variable in diesem Beispiel definiert wird, indem ihr als Wert ein leerer String zugewiesen wird. Die Wirkung ist identisch mit der des vorangegangenen Scripts mit der isset()-Überprüfung. Jedoch ist es ein logischer Unterschied, ob eine Variable nicht existiert oder ob sie definiert wurde. Je nach Kontext kann es also zu unerwünschten Auswirkungen beim Interpretieren anderer Passagen in Ihrem PHP-Script kommen.

Ergebnis

Requests per second (RPS)Time per Request (TPR)Vergleich
Ausgabe undefinierter Variable mit echo14.07 [#/sec] (mean)71.078 [ms] (mean)
Überprüfung mit isset()171.12 [#/sec] (mean)5.844 [ms] (mean)
1116.2%
91.8%
Leeren String zuweisen180.28 [#/sec] (mean)5.547 [ms] (mean)
1181.3%
92.2%

Beide Scripte, bei denen die Verwendung einer undefinierten Variablen vermieden wird, sind mehr als 12mal so schnell wie der Beispiel-Code, bei dem eine nicht definierte Variable mit echo ausgegeben werden soll. Die beiden „sauberen” Lösungen haben nahezu die identische Ausführzeit, obwohl sie einen erheblichen Unterschied aufweisen: Beim mit Leeren String zuweisen titulierten Script wird das isset()-Konstrukt ausgespart. Dafür kommt im Gegensatz zur Überprüfung mit isset() das echo-Konstrukt zum Tragen, das in diesem Fall einen leeren String ausgibt.

Fazit

Die Beispiel-Scripte haben gezeigt, wie wichtig es ist, die Verwendung undefinierter Variablen zu vermeiden. Die Auswirkungen auf die Performance Ihrer PHP-Scripte sind enorm. Äquivalent zur Prüfung von Variablen mit isset() kann defined() verwendet werden, um die Existenz von Konstanten zu prüfen.

 

Anmerkung:
Die Tests wurden mit dem Apache HTTP server benchmarking tool ab auf einem im Februar 2017 nicht mehr dem Stand der Technik entsprechenden Server durchgeführt. Die RPS und TPR der getesteten PHP-Scripte sollten auf einem im Produktiv-Einsatz befindlichen Webserver deutlich besser sein.

PHP-Performance verbessern: Konstantenmissbrauch vermeiden

PHP-Performance verbessern: Konstantenmissbrauch vermeiden

Der Missbrauch von Konstanten bei Array-Keys ist vor allem bei Anfängern ein beliebter Fehler. Da abhängig von error_reporting()-Level bzw. der display_errors()-Einstellung auf den meisten Servern von Webhosting-Anbietern beim Ausführen des PHP-Codes keine Fehlermeldung ausgegeben wird, fällt der Fehler oftmals gar nicht auf. Zur Verbesserung der Performance sollte er jedoch in jedem Fall vermieden werden nach …