Sintassi

Le costanti possono essere definite utilizzando la parola chiave const o utilizzando la funzione define(). Mentre define() permette di definire una costante in un'espressione arbitraria, la parola chiave const ha delle restrizioni come descritto nel paragrafo successivo. Una volta definita, una costante non può mai essere modificata o non definita.

Quando si utilizza la parola chiave const, sono accettate solo espressioni scalari (bool, int, float e string) e array costanti contenenti solo espressioni scalari. È possibile definire costanti come una resource, ma questo dovrebbe essere evitato, poiché può causare risultati inaspettati.

Si accede al valore di una costante semplicemente specificandone il nome. A differenza delle variabili, una costante non è preceduta da un $. È anche possibile utilizzare la funzione costant() per leggere il valore di una costante se il nome della costante è ottenuto dinamicamente. Si utilizzi get_defined_constants() per ottenere una lista di tutte le costanti definite.

Nota: Costanti e variabili (globali) si trovano in un "namespace" differente. Questo implica che generalmente true e $TRUE sono differenti.

Se si utilizza una costante non definita, viene generato un Error. Prima di PHP 8.0.0, le costanti non definite venivano interpretate come una semplice parola string, ovvero (COSTANTE vs "COSTANTE"). Questo fallback è deprecato a partire da PHP 7.2.0, e quando si verifica viene emesso un errore di livello E_WARNING. Prima di PHP 7.2.0, è stato invece emesso un errore di livello E_NOTICE. Si veda anche la voce del manuale sul perché $foo[bar] è sbagliato (a meno che bar sia una costante). Questo non si applica alle costanti qualificate (completamente), che genereranno sempre un Error se non definite.

Nota: Per verificare che una costante sia impostata, utilizzare la funzione defined().

Di seguito sono riportate le principali differenze rispetto le variabili:

  • Le costanti non iniziano con il segno del dollaro ($);
  • Le costanti possono essere definite e utilizzate ovunque senza seguire le regole di visibilità;
  • Una volta impostate, le costanti non posso essere redefinite e né annullate;
  • Le costanti possono essere valutate solo come valori scalari o array.

Example #1 Definizione di costanti

<?php
define("COSTANTE", "Ciao mondo.");
echo COSTANTE; // stampa "Ciao mondo."
echo Costante; // Emette un errore: Undefined constant "Constant"
               // Prima di PHP 8.0.0, stampa "Constant" ed emette un avviso.
?>

Example #2 Definizione di Costanti utilizzando la parola chiave const

<?php
// Valore scalare semplice
const CONSTANT 'Hello World';

echo 
CONSTANT;

// Espressione scalare
const ANOTHER_CONST CONSTANT.'; Goodbye World';
echo 
ANOTHER_CONST;

const 
ANIMALS = array('dog''cat''bird');
echo 
ANIMALS[1]; // visualizza "cat"

// Array costanti
define('ANIMALS', array(
    
'dog',
    
'cat',
    
'bird'
));
echo 
ANIMALS[1]; // visualizza "cat"
?>

Nota:

Al contrario di definire costanti utilizzando define(), le costanti definite utilizzando la parola chiave const devono essere dichiarate nella scope del livello superiore perchè sono definite in fase di compilazione. Questo significa che non possono essere dichiarate all'interno di funzioni, cicli, istruzioni if oppure blocchi try/ catch.

Vedere anche:

add a note add a note

User Contributed Notes 4 notes

up
10
login at (two)view dot de
4 years ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
up
-5
halfhearted13 at gmail dot com
1 year ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
up
-8
privat at ulrich-kapp dot de
2 years ago
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);

does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …

Instead use:

define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));

print_r(ArrayFromTextfile);

Result:
Array
(
    [0] ⇨ Line 1
    [1] ⇨ Line 2
    [2] ⇨ Line 3
    [3] => …
)
up
-12
mh at hanft dot de
3 years ago
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul')));

won't work with PHP 5.6, but

const QUARTLIST=array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

will.
To Top