W3docs

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 qualificata ClassName::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

php— editable, runs on the server

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'); // 404

Per 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; // H

Protezione 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 di PI come 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.

Pratica

Pratica
Quali sono le caratteristiche delle costanti PHP?
Quali sono le caratteristiche delle costanti PHP?
Was this page helpful?