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-unifsau într-o funcție. Nu este permis; acolo foloseștedefine.
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.