define() vs const in PHP: Ausführlicher Leitfaden mit Beispielen
\n\nJeder PHP-Entwickler steht früher oder später vor der Frage: Wie deklariert man eine Konstante am besten – mit define() oder dem Schlüsselwort const? Auf den ersten Blick gibt es kaum einen Unterschied. Beide Varianten erstellen einen unveränderlichen Wert. Aber der Teufel steckt, wie immer, im Detail.
Dieser Artikel ist keine langweilige Auszug aus dem Handbuch. Wir analysieren reale Fälle, in denen ein Ansatz gewinnt und der andere versagt. Sie erfahren, wie Sie Konstanten in PHP 7 und PHP 8 korrekt deklarieren und saubereren, vorhersehbareren Code schreiben können.
\n\nBereit? Los geht's!
\n\nWas ist eine Konstante in PHP?
\n\nBevor wir vergleichen, erinnern wir uns an die Grundlagen. Eine Konstante ist ein Bezeichner (Name) für einen einfachen Wert. Ihre Haupteigenschaft: Der Wert kann während der Skriptausführung nicht geändert oder gelöscht werden.
\n\nKonstanten eignen sich zum Speichern von Einstellungen, Dateipfaden, API-Schlüsseln und anderen statischen Daten.
\n\n<?php\n// Konstante mit define() definieren\ndefine('SITE_NAME', 'PythonLib');\n\n// Konstante mit const definieren\nconst SITE_URL = 'https://pythonlib.ru';\n\necho SITE_NAME; // PythonLib\necho SITE_URL; // https://pythonlib.ru\n?>\n\nBeide Methoden funktionieren. Aber gehen wir tiefer.
\n\nHauptunterschiede zwischen define() und const
\n\n1. Zeitpunkt der Definition
\n\nDies ist der wichtigste Punkt. const ist eine Sprachkonstruktion, die während der Kompilierung verarbeitet wird (vor der Skriptausführung). define() ist eine Funktion, die zur Laufzeit ausgeführt wird (während der Skriptausführung).
Was bedeutet das in der Praxis?
\n\n- \n
constkann nur zur Deklaration von Konstanten auf der obersten Ebene des Skripts oder innerhalb einer Klasse verwendet werden. Sie könnenconstnicht innerhalb einerfor-Schleife, einerif-Bedingung oder einer Funktion platzieren. \n define()kann überall aufgerufen werden: innerhalb einer Schleife, Bedingung oder Funktion. Das bietet Flexibilität. \n
<?php\n// Das funktioniert\nif (true) {\n define('DB_HOST', 'localhost');\n}\n\n// Das führt zu einem fatalen Fehler\nif (true) {\n // const DB_HOST = 'localhost'; // Fehler!\n}\n\n// const kann jedoch in einer Klasse verwendet werden\nclass Config {\n const DB_NAME = 'test';\n}\n?>\n\nFazit: Wenn Sie eine Konstante dynamisch definieren müssen (z. B. abhängig von einer Bedingung oder innerhalb einer Funktion), wählen Sie define().
2. Datentypen
\n\nIn PHP 7 und 8 unterstützt define() mehr Datentypen als const.
- \n
constkann nur skalare Werte (int, float, string, bool, null) und Arrays (seit PHP 5.6) annehmen. \n define()unterstützt seit PHP 7 ebenfalls Arrays und in PHP 8 sogar Objekte (was jedoch selten vorkommt). \n
<?php\n// const kann ein Array speichern (seit PHP 5.6)\nconst FRUITS = ['apple', 'banana', 'cherry'];\n\n// define() kann das auch (seit PHP 7)\ndefine('VEGETABLES', ['carrot', 'potato']);\n\n// Ein Objekt hingegen nur mit define() (PHP 8+)\n// const OBJECT = new stdClass(); // Fehler!\ndefine('MY_OBJECT', new stdClass()); // Funktioniert\n?>\n\nFazit: Für die meisten Aufgaben sind beide Varianten geeignet. Wenn Sie jedoch ein Objekt speichern müssen, nur define().
3. Kontext: Globale vs. Klassenkonstanten
\n\nconst ist ein universelles Werkzeug. Es kann sowohl außerhalb von Klassen (globale Konstanten) als auch innerhalb von Klassen (Klassenkonstanten) verwendet werden.
define() ist nur für globale Konstanten gedacht. Innerhalb einer Klasse