define() vs const in PHP: Was im Jahr 2024 wählen (+Code)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

define() vs const in PHP: Ausführlicher Leitfaden mit Beispielen

\n\n

Jeder 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.

\n\n

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\n

Bereit? Los geht's!

\n\n

Was ist eine Konstante in PHP?

\n\n

Bevor 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\n

Konstanten 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\n

Beide Methoden funktionieren. Aber gehen wir tiefer.

\n\n

Hauptunterschiede zwischen define() und const

\n\n

1. Zeitpunkt der Definition

\n\n

Dies 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).

\n\n

Was bedeutet das in der Praxis?

\n\n
    \n
  • const kann nur zur Deklaration von Konstanten auf der obersten Ebene des Skripts oder innerhalb einer Klasse verwendet werden. Sie können const nicht innerhalb einer for-Schleife, einer if-Bedingung oder einer Funktion platzieren.
  • \n
  • define() kann überall aufgerufen werden: innerhalb einer Schleife, Bedingung oder Funktion. Das bietet Flexibilität.
  • \n
\n\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\n

Fazit: Wenn Sie eine Konstante dynamisch definieren müssen (z. B. abhängig von einer Bedingung oder innerhalb einer Funktion), wählen Sie define().

\n\n

2. Datentypen

\n\n

In PHP 7 und 8 unterstützt define() mehr Datentypen als const.

\n\n
    \n
  • const kann 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
\n\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\n

Fazit: Für die meisten Aufgaben sind beide Varianten geeignet. Wenn Sie jedoch ein Objekt speichern müssen, nur define().

\n\n

3. Kontext: Globale vs. Klassenkonstanten

\n\n

const ist ein universelles Werkzeug. Es kann sowohl außerhalb von Klassen (globale Konstanten) als auch innerhalb von Klassen (Klassenkonstanten) verwendet werden.

\n\n

define() ist nur für globale Konstanten gedacht. Innerhalb einer Klasse

Blogs

Buchempfehlungen