define / defined / constant în PHP

Variabile PHP 4+

Definește o constantă globală (define), verifică dacă există (defined) sau îi citește valoarea după nume (constant).

Sintaxă
define(string $constant_name, mixed $value, bool $case_insensitive = false): bool

Ce face define / defined / constant

O constantă are un nume, o valoare care nu se mai schimbă și este vizibilă peste tot, inclusiv în funcții. Se folosește fără dolar: define("TVA", 0.21); echo TVA;. Valoarea poate fi un număr, un text, bool, null sau un tablou.

defined("NUME") verifică dacă o constantă a fost definită, iar constant("NUME") îi citește valoarea când ai numele într-o variabilă (inclusiv constante de clasă: constant("Clasa::NUME")).

Spre deosebire de const, define rulează la execuție, deci poate fi pus într-un if. Așa face WordPress în wp-config.php. Al treilea parametru (constante fără majuscule) nu mai este suportat din PHP 8.

Parametri

Parametru Descriere
$constant_name Numele constantei.
$value Valoarea constantei.
$case_insensitive Învechit. Din PHP 8 este ignorat și dă avertisment dacă îl pui true.

Ce returnează

true dacă a fost definită. Dacă există deja, apare un avertisment și returnează false.

Exemple

Exemplul 1: Constante de configurare

<?php
define("SITE_NUME", "dexblog.ro");
define("PE_PAGINA", 10);
define("LIMBI", ["ro", "en"]);

function antet(): string
{
    return SITE_NUME . " (" . implode("/", LIMBI) . ")";
}

echo antet() . "\n";
echo "Articole pe pagină: " . PE_PAGINA;

Rezultat

dexblog.ro (ro/en)
Articole pe pagină: 10

Exemplul 2: Definire condiționată cu defined

Un fișier de configurare poate seta o constantă, iar codul îi pune o valoare implicită doar dacă lipsește.

<?php
define("DEBUG", true);

if (!defined("DEBUG")) {
    define("DEBUG", false);
}
if (!defined("CACHE_MINUTE")) {
    define("CACHE_MINUTE", 15);
}

var_dump(DEBUG);
var_dump(CACHE_MINUTE);

Rezultat

bool(true)
int(15)

Exemplul 3: constant() cu numele într-o variabilă

<?php
define("PRET_STANDARD", 15);
define("PRET_EXPRES", 30);

foreach (["standard", "expres"] as $livrare) {
    $nume = "PRET_" . strtoupper($livrare);
    echo "Livrare $livrare: " . constant($nume) . " lei\n";
}
echo constant("PHP_INT_SIZE") . " octeți pentru un int";

Rezultat

Livrare standard: 15 lei
Livrare expres: 30 lei
8 octeți pentru un int

Greșeli frecvente

  • Pui constanta între ghilimele când o folosești: echo "TVA"; afișează textul „TVA”, nu valoarea. Constantele se scriu fără ghilimele și fără dolar.
  • Folosești o constantă nedefinită. Din PHP 8 primești eroarea Undefined constant (în versiunile vechi era transformată tacit în text).
  • Definești de două ori aceeași constantă. A doua oară primești avertismentul Constant ... already defined. Verifică întâi cu defined.

Comenzi înrudite

  • const: Definește o constantă: o valoare cu nume care nu se mai poate schimba. Poate fi globală sau în interiorul unei clase.
  • isset: Verifică dacă o variabilă există și nu are valoarea null.