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.
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:
$
);
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, istruzioniif
oppure blocchitry
/catch
.
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.
Constants of constant :
<?php
const foo = hello;
const bar = foo;
const bd = bar;
echo "bd = " .bd; // Prints out: Hello
?>
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] => …
)
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.