const în PHP

Clase și obiecte PHP 5+ (const în afara claselor: PHP 5.3+)

Definește o constantă: o valoare cu nume care nu se mai poate schimba. Poate fi globală sau în interiorul unei clase.

Sintaxă
const NUME = valoare;
class C { public const NUME = valoare; }  // C::NUME

Ce face const

O constantă de clasă se definește cu const și se citește cu NumeClasa::NUME (sau self::NUME din interior). Constantele nu au semnul dolar și se scriu de obicei cu majuscule.

const poate fi folosit și la nivelul fișierului, ca alternativă la funcția define. Diferența: const se evaluează la compilare, deci nu poate fi pus într-un if, iar define poate. Din PHP 8.3, constantele de clasă pot avea și tip: const string VERSIUNE = "1.0";.

Exemple

Exemplul 1: Constante de clasă

<?php
class Comanda
{
    public const STATUS_NOUA = "noua";
    public const STATUS_LIVRATA = "livrata";
    public const TVA = 0.21;

    public function __construct(public float $valoare, public string $status = self::STATUS_NOUA)
    {
    }
}

$c = new Comanda(100);
echo $c->status . "\n";
echo "TVA: " . Comanda::TVA * $c->valoare . " lei\n";
var_dump($c->status === Comanda::STATUS_NOUA);

Rezultat

noua
TVA: 21 lei
bool(true)

Exemplul 2: Constantă globală

<?php
const SITE = "dexblog.ro";
const PE_PAGINA = 10;

echo "Pe " . SITE . " afișăm " . PE_PAGINA . " articole pe pagină.";

Rezultat

Pe dexblog.ro afișăm 10 articole pe pagină.

Exemplul 3: O constantă nu poate fi modificată

<?php
class Config
{
    public const LIMBA = "ro";
}

echo Config::LIMBA . "\n";
// Config::LIMBA = "en";  ar opri scriptul cu eroare de sintaxă
echo constant("Config::LIMBA");

Rezultat

ro
ro

Greșeli frecvente

  • Pui dolar în fața constantei: Config::$LIMBA. PHP caută atunci o proprietate statică și dă eroare.
  • Folosești const într-un if sau într-o funcție. Nu este permis; acolo folosește define.

Comenzi înrudite

  • define / defined / constant: Definește o constantă globală (define), verifică dacă există (defined) sau îi citește valoarea după nume (constant).
  • enum: Definește un tip cu un set fix de valori posibile, de exemplu statusurile unei comenzi.
  • static / self::: Membrii static aparțin clasei, nu unui obiect anume. Se apelează cu NumeClasa::metoda(), fără new.