Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

PHP define(): Konstanten definieren und richtig einsetzen

Sie befinden sich: Home > Php Tutorial > PHP define(): Konstanten...

PHP define(): Konstanten definieren und richtig einsetzen


Eintrag am:  30.03.2026
Hits / Besucher:  68
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

In PHP gibt es Werte, die sich während der gesamten Laufzeit eines Skripts nicht ändern sollen. Datenbank-Zugangsdaten, Versionsnummern oder Konfigurationsparameter sind typische Beispiele dafür. Die Funktion define() erstellt benannte Konstanten, die nach ihrer Definition unveränderlich und im gesamten Skript global verfügbar sind. Dieses Tutorial erklärt die Syntax von define(), zeigt den Unterschied zu const, behandelt Arrays als Konstanten und geht auf häufige Fehlerquellen ein.

Illustration zum Tutorial: PHP define(): Konstanten definieren und richtig einsetzen

Schauen wir uns zuerst an, wie die Funktion arbeitet und welche Werte sie als Konstanten akzeptiert.

Was macht define() in PHP?

Die Funktion define() erzeugt eine Konstante mit einem festen Namen und einem unveränderlichen Wert. Anders als Variablen tragen Konstanten kein $-Zeichen als Präfix und werden per Konvention in Großbuchstaben geschrieben.

<?php

define('SEITENNAME', 'Meine Webseite');
define('MAX_UPLOADS', 10);
define('DEBUG_MODUS', true);

echo SEITENNAME;
/* Ausgabe: Meine Webseite */

echo "Maximal " . MAX_UPLOADS . " Uploads erlaubt.";
/* Ausgabe: Maximal 10 Uploads erlaubt. */

Die Syntax lautet define(string $name, mixed $value). Der erste Parameter ist der Name der Konstante als String, der zweite Parameter ist der zuzuweisende Wert. Als Werte sind Strings, Integer, Floats, Booleans und seit PHP 7.0 auch Arrays erlaubt. Nach der Definition ist die Konstante im gesamten Skript verfügbar, auch innerhalb von Funktionen und Methoden, ohne dass das Schlüsselwort global benötigt wird. Ein späteres Ändern oder Löschen mit unset() ist nicht möglich.

define() vs. const: Die Unterschiede

Neben define() bietet PHP mit const eine zweite Möglichkeit, Konstanten zu erstellen. Beide Ansätze erzeugen unveränderliche Werte, unterscheiden sich jedoch im Zeitpunkt der Auswertung und im Einsatzbereich.

<?php

/* define() funktioniert zur Laufzeit */
if (!defined('DB_HOST')) {
define('DB_HOST', 'localhost');
}

/* const funktioniert nur auf oberster Ebene */
const DB_PORT = 3306;

/* In einer Klasse muss const verwendet werden */
class Datenbank
{
const STANDARD_CHARSET = 'utf8mb4';
}

echo Datenbank::STANDARD_CHARSET;
/* Ausgabe: utf8mb4 */

Der zentrale Unterschied liegt im Zeitpunkt der Auswertung: const wird zur Compile-Zeit verarbeitet und kann daher nicht innerhalb von Bedingungen, Schleifen oder Funktionen stehen. define() wird zur Laufzeit ausgeführt und lässt sich deshalb flexibel in if-Blöcken oder Schleifen verwenden. Innerhalb von Klassen ist ausschließlich const erlaubt, define() funktioniert dort nicht. Für globale Konfigurationswerte ist define() die bessere Wahl, für Klassenkonstanten ist const die einzige Option.

Das folgende Diagramm zeigt, wann welcher Ansatz zum Einsatz kommt.

flowchart TD
    A{"Wo wird die Konstante benötigt?"}
    A -->|"Klassen-Kontext"| B["const in der Klasse"]
    A -->|"Globale Konfiguration"| C["define()"]
    A -->|"Bedingt definieren"| D["if + define()"]
    B --> E["Zugriff: Klasse::KONSTANTE"]
    C --> F["Zugriff: KONSTANTE"]
    D --> F

Arrays als Konstanten definieren

Seit PHP 7.0 unterstützt define() auch Arrays als Werte. Das ermöglicht es, zusammengehörige Konfigurationswerte in einer einzigen Konstante zu bündeln.

<?php

define('ERLAUBTE_DATEITYPEN', ['jpg', 'png', 'gif', 'webp']);

if (in_array('pdf', ERLAUBTE_DATEITYPEN)) {
echo "PDF ist erlaubt.";
} else {
echo "PDF ist nicht erlaubt.";
}
/* Ausgabe: PDF ist nicht erlaubt. */

echo ERLAUBTE_DATEITYPEN[0];
/* Ausgabe: jpg */

Der Zugriff auf einzelne Elemente erfolgt über den Index in eckigen Klammern. Die Werte innerhalb des Arrays lassen sich nach der Definition weder ändern noch erweitern. Mit const sind Array-Konstanten bereits seit PHP 5.6 möglich. In beiden Fällen bleibt das Array während der gesamten Skriptlaufzeit unveränderlich.

Prüfen ob eine Konstante existiert: defined()

Bevor auf eine Konstante zugegriffen wird, kann mit defined() geprüft werden, ob sie bereits definiert wurde. Das ist besonders bei Konfigurationsdateien nützlich, die in unterschiedlicher Reihenfolge geladen werden können.

<?php

define('DEBUG_MODUS', true);

if (defined('DEBUG_MODUS') && DEBUG_MODUS === true) {
error_reporting(E_ALL);
ini_set('display_errors', '1');
}

/* Konstante nur setzen, wenn sie noch nicht existiert */
if (!defined('APP_VERSION')) {
define('APP_VERSION', '2.1.0');
}

echo APP_VERSION;
/* Ausgabe: 2.1.0 */

Die Funktion defined() gibt true zurück, wenn die Konstante existiert, und false, wenn nicht. Dieses Muster ist in PHP-Projekten weit verbreitet, um Standardwerte zu setzen, die von einer vorher eingebundenen Konfigurationsdatei überschrieben werden können. Die Kombination aus defined() und define() verhindert zuverlässig doppelte Definitionen.

Konstanten in der Praxis: Konfigurationsdateien

Ein häufiger Einsatzbereich für define() sind zentrale Konfigurationsdateien, die Datenbankverbindungen, Pfade und andere feste Werte enthalten.

<?php

/* config.php */
define('DB_HOST', 'localhost');
define('DB_NAME', 'meine_app');
define('DB_USER', 'root');
define('DB_PASS', 'geheim');
define('APP_VERSION', '2.1.0');
define('MAX_LOGIN_VERSUCHE', 5);

/* In einer anderen Datei */
/* require_once 'config.php'; */

$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8mb4';
echo $dsn;
/* Ausgabe: mysql:host=localhost;dbname=meine_app;charset=utf8mb4 */

Durch die Auslagerung aller Konfigurationswerte in eine eigene Datei lassen sich Einstellungen zentral verwalten und bei Bedarf pro Umgebung (Entwicklung, Staging, Produktion) anpassen. Da Konstanten global verfügbar sind, können alle Dateien im Projekt auf die Werte zugreifen, ohne sie als Parameter weitergeben zu müssen.

Häufige Fehler bei Konstanten

Im Umgang mit Konstanten gibt es einige typische Stolperfallen, die besonders Einsteiger betreffen.

<?php

/* Fehler 1: Konstante doppelt definieren */
define('API_KEY', 'abc123');
define('API_KEY', 'xyz789');
/* Warning: Constant API_KEY already defined */

/* Fehler 2: Undefinierte Konstante verwenden (PHP 8.0+) */
/* echo NICHT_DEFINIERT; */
/* Fatal Error: Undefined constant "NICHT_DEFINIERT" */

/* Fehler 3: Konstante mit $ verwenden */
/* define('$PREIS', 100); */
/* Funktioniert, ist aber keine gute Praxis */

/* Korrekt: Vorher pruefen */
if (!defined('API_KEY')) {
define('API_KEY', 'abc123');
}
echo API_KEY;
/* Ausgabe: abc123 */

Ein doppelter Aufruf von define() mit demselben Namen löst eine Warning aus, der ursprüngliche Wert bleibt dabei erhalten. Seit PHP 8.0 führt die Verwendung einer undefinierten Konstante zu einem Fatal Error. In älteren PHP-Versionen wurde der Name als String interpretiert, was zu schwer auffindbaren Fehlern führte. Ebenfalls wichtig: Case-insensitive Konstanten (der frühere dritte Parameter von define()) sind seit PHP 7.3 veraltet und seit PHP 8.0 vollständig entfernt. Konstanten sind immer case-sensitive.

Fazit

Die Funktion define() ist das Standardwerkzeug für globale Konstanten in PHP. Sie erstellt unveränderliche Werte, die ohne global im gesamten Skript verfügbar sind. Mit const steht eine Alternative zur Verfügung, die zur Compile-Zeit ausgewertet wird und in Klassen Verwendung findet. Für bedingte Definitionen und Konfigurationsdateien ist define() die richtige Wahl. Die Prüfung mit defined() vor der Definition verhindert doppelte Zuweisungen und Warnungen. Seit PHP 7.0 lassen sich auch Arrays als Konstanten definieren, was die Organisation von zusammengehörigen Konfigurationswerten vereinfacht.

 


Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.