constant()
La funzione constant() in PHP viene usata per recuperare il valore di una costante.
Cosa fa constant()
La funzione constant() restituisce il valore di una costante il cui nome viene fornito come string. Questa pagina tratta la sua firma, perché mai vorresti usarla invece di scrivere la costante direttamente, come funziona con le costanti di classe ed enum, e le insidie da tenere d'occhio.
Se conosci il nome di una costante solo a runtime — ad esempio perché è stato costruito da un'altra variabile — constant() è il modo per cercarla. Per scoprire come vengono create le costanti, consulta PHP Constants e la funzione define().
Sintassi e valore restituito
constant(string $name): mixed$name— il nome della costante come string. Per una costante di classe, usa la forma completamente qualificataClassName::CONSTANT.- Restituisce il valore della costante. Il tipo restituito corrisponde a ciò che la costante contiene (
int,string,float,bool,array, oppure un caso di enum).
Se la costante non è definita, constant() lancia un Error (un'eccezione \Error) in PHP 8 e versioni successive. Controlla prima con defined() quando non sei sicuro.
Esempio di base
La costante PI è definita con il valore 3.14159. constant("PI") recupera quel valore, che viene poi usato per calcolare l'area di un cerchio. L'output è:
The area of a circle with radius 5 is 78.53975.Quando usarla?
In questo esempio di base constant("PI") fa esattamente la stessa cosa che scrivere PI direttamente — quindi non c'è motivo di usarla qui. La funzione ha senso solo quando il nome della costante non è noto fino a runtime. Poiché non puoi scrivere una variabile al posto di un nome di costante, constant() ti permette di risolvere un nome contenuto in una string:
<?php
const LEVEL_LOW = 1;
const LEVEL_HIGH = 9;
$severity = 'HIGH';
$value = constant("LEVEL_$severity");
echo "Severity level: $value";Questo stampa Severity level: 9. La costante scelta dipende da $severity, cosa che un riferimento hardcoded a LEVEL_HIGH non potrebbe mai fare.
Costanti di classe ed enum
constant() risolve anche le costanti di classe e i casi di enum quando si passa la forma Class::NAME come string:
<?php
class Http
{
const NOT_FOUND = 404;
}
echo constant('Http::NOT_FOUND'); // 404Per un enum, constant() restituisce l'oggetto caso corrispondente, quindi puoi leggere il suo value:
<?php
enum Suit: string
{
case Hearts = 'H';
case Spades = 'S';
}
$case = constant('Suit::Hearts');
echo $case->value; // HProtezione contro costanti non definite
Passare il nome di una costante non esistente lancia un Error. Abbina constant() a defined() per verificare prima:
<?php
if (defined('TIMEOUT')) {
echo constant('TIMEOUT');
} else {
echo 'not defined';
}Quando TIMEOUT non è stato definito, questo stampa not defined invece di andare in crash.
Insidie
- Accetta una string, non la costante stessa. Scrivere
constant(PI)(senza virgolette) cerca di usare il valore diPIcome nome, il che quasi non è mai quello che vuoi. - I nomi delle costanti sono sensibili alle maiuscole.
constant('pi')non troveràPI. - I nomi non definiti lanciano un errore. Usa
defined()come protezione, come mostrato sopra. - Usala solo per nomi dinamici. Se conosci il nome della costante quando scrivi il codice, fai riferimento ad essa direttamente — è più chiaro e più veloce.