W3docs

defined()

Die Funktion defined() in PHP prüft, ob eine Konstante definiert ist oder nicht.

Was die Funktion defined() bewirkt

defined() ist eine eingebaute PHP-Funktion, die prüft, ob eine Konstante mit einem bestimmten Namen bereits existiert. Sie gibt true zurück, wenn die Konstante definiert ist, und false, wenn nicht. Diese Seite behandelt die Syntax, das Testen von Klassen- und Namespace-Konstanten, den häufigen Fehler der Verwechslung mit isset() und wann man diese Funktion tatsächlich einsetzen würde.

Eine Konstante ist ein Name, dessen Wert sich während einer einzelnen Anfrage nicht ändern kann — erstellt mit define() oder dem Schlüsselwort const. Da das Referenzieren einer undefinierten Konstante einen Fehler auslöst (eine Error-Ausnahme in PHP 8+, einen Hinweis in älteren Versionen), ermöglicht defined() eine vorherige Prüfung und verhindert dies.

Syntax

defined(string $constant_name): bool
  • $constant_name — ein string, der den Namen der zu suchenden Konstante enthält. Beachten Sie, dass Sie den Namen als string übergeben ("GREETING"), nicht die Konstante selbst (GREETING).
  • Gibt true zurück, wenn eine Konstante mit diesem Namen existiert, andernfalls false.

Die bloße Konstante anstelle ihres Namens zu übergeben — defined(GREETING) — versucht zunächst, GREETING auszuwerten, was fehlschlägt, wenn sie nicht definiert ist. Setzen Sie den Namen stets in Anführungszeichen.

Einfaches Beispiel

php— editable, runs on the server

Da GREETING in der Zeile darüber erstellt wurde, gibt defined("GREETING") true zurück und das Skript gibt Hello, world! aus.

Klassen- und Namespace-Konstanten prüfen

defined() funktioniert auch mit Klassen- und Namespace-Konstanten. Verwenden Sie den vollständig qualifizierten Namen als string:

<?php

const PI = 3.14;

class Circle {
    const SHAPE = "round";
}

var_dump(defined("PI"));             // bool(true)
var_dump(defined("Circle::SHAPE"));  // bool(true)  — class constant
var_dump(defined("Circle::MISSING"));// bool(false) — no such constant
var_dump(defined("UNDEFINED"));      // bool(false)

Bei Klassenkonstanten lautet die Syntax "ClassName::CONSTANT_NAME". Für eine Namespace-Konstante geben Sie den vollständigen Pfad an, z. B. defined("App\\Config\\VERSION").

defined() vs. isset(): ein häufiger Irrtum

defined() prüft Konstanten; isset() prüft Variablen (und Array-Schlüssel / Objekteigenschaften). Sie sind nicht austauschbar:

<?php

$name = "Alex";          // a variable
define("APP_NAME", "W3"); // a constant

var_dump(isset($name));        // bool(true)  — variable exists
var_dump(defined("name"));     // bool(false) — no constant called "name"
var_dump(defined("APP_NAME")); // bool(true)  — constant exists

Wenn Sie sich dabei ertappen, nach defined("$variable") zu greifen, möchten Sie mit hoher Wahrscheinlichkeit stattdessen isset() verwenden.

Wann man es verwenden sollte

  • Optionale Konfigurations-Konstanten absichern. Frameworks erlauben es oft, Konstanten wie DEBUG oder APP_ENV vorzudefinieren; verwenden Sie defined(), um einen Standardwert nur dann anzuwenden, wenn der Benutzer noch keinen gesetzt hat.
  • Doppelte Definitionen verhindern. define() gibt beim Neudefinieren einer vorhandenen Konstante eine Warnung aus; umschließen Sie es daher: if (!defined("API_KEY")) { define("API_KEY", "..."); }.
  • Feature-Erkennung. Bibliotheken stellen Markierungskonstanten bereit (z. B. PHP_VERSION_ID); defined() bestätigt, dass ein auf Konstanten basierendes Feature verfügbar ist, bevor man sich darauf verlässt.

Um den Wert einer Konstante auszulesen, sobald Sie wissen, dass sie existiert, kombinieren Sie defined() mit constant(). Einen umfassenderen Überblick über das Erstellen von Konstanten finden Sie unter PHP Constants und Class Constants.

Übungen

Übung
Was macht die Funktion defined() in PHP?
Was macht die Funktion defined() in PHP?
Was this page helpful?