In PHP è possibile definire delle costanti per assegnare o contenere un valore semplice. Come suggerisce il nome stesso, non è possibile cambiare il valore di una costante durante l’esecuzione di un programma. Facendo ciò otterremmo un errore.
Nel corso degli anni PHP si è evoluto permettendo di:
- definire le costanti con il costrutto
const
e non solo con la funzionedefine()
- a partire dalla versione PHP 7.0 le costanti possono contenere anche gli array oltre a stringhe, numeri interi o decimali e booleani
- a partire dalla versione PHP 7.3 lo sviluppatore può decidere se rendere i nomi delle costanti definite non sensibili alle maiuscole o alle minuscole
Indice riassuntivo
Definire una costante
Per definire una costante utilizziamo la funzione define()
:
<?php define( "NOME_COSTANTE", "Valore costante" ); ?>
Possiamo utilizzare il costrutto echo
per mostrare il valore di una costante:
<?php echo NOME_COSTANTE; ?>
Risultato:
Valore costante
Potevo utilizzare anche i tag <?= ?>
:
<?= NOME_COSTANTE; ?>
Devi fare attenzione quando definisci il nome di una costante perché:
- Il nome della costante nella funzione
define("NOME_COSTANTE", "Valore")
deve essere tra doppi apici - Il nome di una costante NON inizia col simbolo del dollaro
- deve iniziare con una lettera “
a-z
” maiuscola o minuscola o con il simbolo underscore “_
“ - il resto dei caratteri del nome di una costante possono essere una lettera “
a-z
” maiuscola o minuscola, un numero “0-9
” o il simbolo underscore “_
“
Non puoi iniziare il nome di una costante con un numero e non sono ammessi spazi vuoti.
Ecco alcuni esempi di costanti definite in modo corretto e non:
<?php
// Costanti definite in modo corretto
define( "_NOME_COSTANTE", "Un valore qualsiasi" );
define( "NOMECOSTANTE", "Un altro valore" );
define( "_3NOME_COSTANTE", "Valore costante" );
define( "NOME_2_COSTANTE", "Valore costante 2" );
define( "COSTANTE_5735857395", "Valore costante 3" );
// Costanti definite in modo NON corretto
define( "5COSTANTE", "Valore");
define( "NOME COSTANTE", "Valore");
define( "57_COSTANTE", "Valore");
?>
Per convenzione scriviamo il nome di ogni costante in lettere maiuscole.
Una costante può contenere un valore di tipo:
string
(stringa)int
(numero intero)float
(numero decimale)bool
(valore booleano)
Ecco alcuni esempi:
<?php
// Costanti con stringhe di testo
define( "STRING", "Stringa di testo" );
// Costanti con numeri interi
define( "INT_1", 6949 );
define( "INT_2", 3 );
define( "INT_3", 36849 );
define( "INT_4", -69 );
define( "INT_5", -7 );
// Costanti con numeri decimali
define( "FLOAT_1", 2.5);
define( "FLOAT_2", 57.582);
define( "FLOAT_3", -9.84);
define( "FLOAT_4", -689.53);
// Costanti con valori booleani
define( "BOOL_1", true );
define( "BOOL_2", false );
?>
Dalla versione PHP 7.0 una costante può contenere anche array.
Possiamo definire un array in una costante con il costrutto array()
o con le parentesi quadre []
:
<?php
define( "ARRAY_1", array(0, 1, 2, 3, 4) );
define( "ARRAY_2", ["stringa", 56, -53, true] );
?>
Per ottenere il valore di un array dentro a una costante utilizziamo la sintassi a parentesi quadre e definendo il numero dell’indice al loro interno del valore che vogliamo:
<?php
echo ARRAY_1[0]; // output -> 0
echo "<br>";
echo ARRAY_1[1]; // output -> 1
echo "<br>";
echo ARRAY_2[0]; // output -> stringa
?>
All’interno di una costante posso definire anche un array associativo:
<?php
define("ARRAY_ASSOCIATIVO", array(
"nome" => "Michele",
"cognome" => "Mincone",
"eta" => 20,
"occupato" => true,
));
?>
Per ottenere un valore utilizzo le parentesi quadre e dentro di esse la chiave del valore che desidero:
<?php
echo ARRAY_ASSOCIATIVO["nome"]; // output -> Michele
echo "<br>";
echo ARRAY_ASSOCIATIVO["cognome"]; // output -> Mincone
echo "<br>";
echo ARRAY_ASSOCIATIVO["eta"]; // output -> 20
?>
I nomi delle costanti sono sensibili alle maiuscole e alle minuscole:
<?php
define("COSTANTE", "Stringa di testo");
echo COSTANTE; // output -> Stringa di testo
// Qui sotto ottengo un errore
echo costante;
echo Costante;
echo COSTante;
?>
Però è possibile rendere le costanti NON sensibili a maiuscole e minuscole inserendo come terzo parametro della funzione define()
il valore booleano true
;
<?php
// Rendo il nome di questa costante non sensibile a maiuscole e minuscole
define("COSTANTE", "Stringa di testo", true);
echo COSTANTE; // output -> Stringa di testo
// Ora posso chiamare la costante anche in questo modo
echo costante;
echo Costante;
echo COSTante;
?>
Definire una costante con const
Posso definire una costante anche con il costrutto const
e inserendo successivamente un nome che deve iniziare o con una lettera maiuscola o minuscola o il simbolo underscore.
Quindi vale la stessa
<?php
// Costanti valide
const COSTANTE = "Questa è una costante definita con il costrutto const";
const STRINGA = "Sono una stringa di testo";
const NUMERO_INTERO_1 = 786;
const NUMERO_INTERO_2 = -6;
const NUMERO_DECIMALE_1 = 6.3;
const NUMERO_DECIMALE_2 = -8.78;
const BOOL_1 = true;
const BOOL_2 = false;
const ARRAY_1 = array(1, -2, true, false, "testo", 66.2);
const ARRAY_2 = [1, 5, 6.4, -5, true, "testo"];
const ARRAY_ASSOCIATIVO = array(
"nome" => "Michele",
"cognome" => "Mincone"
);
// Costanti NON valide
const 858COSTANTE = "Valore";
const 84_COSTANTE = 83;
const _COSTANTE 1 = 6.2;
const 4_COSTANTE_2 = 77;
?>
Anche qui posso definire costanti che contengono: string
, int
, float
, bool
e array
.
Utilizzo sempre il costrutto echo
per ottenere il valore:
<?php
echo COSTANTE; // output -> Questa è una costante definita con il costrutto const
echo "<br>";
echo STRINGA; // output -> Sono una stringa di testo
echo "<br>";
echo NUMERO_INTERO_1; // output -> 786
?>
Differenze tre define()
e const
La parola define()
è una funzione che accetta tre argomenti:
define(string $nomeCostante, string $valoreCostante, bool $sensibileAlleMinuscoleMaiuscole);
Essendo define()
una funzione verrà eseguita in runtime.
Invece, se utilizzo il costrutto const
la costante verrà definita durante la fase di compilazione.
Quindi, posso utilizzare la funzione define()
assieme a un blocco condizionale. Ad esempio, verifichiamo se una costante è stata già definita con la funzione defined()
:
<?php
if ( !defined("LARGHEZZA") ) {
define("LARGHEZZA", 1280);
}
echo LARGHEZZA; // output -> 1280
?>
Quindi posso utilizzare la funzione defined()
per verificare se una costante è stata già definita o meno.
Non posso fare la stessa cosa con il costrutto const
:
<?php
if ( !defined("ALTEZZA") ) {
const ALTEZZA = 1280;
}
echo ALTEZZA;
?>
Il codice qui sopra darà un errore!
La funzione define()
ci permette anche di definire il nome delle costanti a partire dal valore di un’altra costante:
<?php
// Definiamo un prefisso
define( "NUMBER", "NUMERO" );
// Definiamo varie costanti utilizzando il prefisso qui sopra
define( NUMBER . "_1", "555 555 5555" );
define( NUMBER . "_2", "222 222 2222" );
define( NUMBER . "_3", "111 111 1111" );
?>
Questa operazione non possiamo eseguirla con il costrutto const
.
Il valore di una costante non può cambiare
Per definizione, il valore di una costante non può cambiare nello script di un programma.
Concatenare più costanti
Come con le variabili, è possibile concatenare più costanti utilizzando il punto “.
“, ecco un esempio:
<?php
// Definisco un po' di costanti alcune con la funzione define() e altre con const
define("MODELLO_TELEFONO_1", "iPhone 13");
define("RISOLUZIONE", "2532 x 1170");
const UNITA_MISURA_PX = "px";
// Costruisco una frase concatenando le costanti
echo "Lo smartphone " . MODELLO_TELEFONO_1 . " ha uno schermo con una risoluzione di " . RISOLUZIONE . " " . UNITA_MISURA_PX . ".";
?>
Risultato:
Lo smartphone iPhone 13 ha una risoluzione di 2532 x 1170 px.
Eseguire operazioni con le costanti
Posso eseguire operazioni a partire dalle costanti definite assieme alle variabili:
<?php
// Definiamo alcune costanti e una variabile
const IVA = 22;
const VALUTA = "€";
$prezzo_smartphone_no_iva = 499;
// Eseguiamo un'operazione dentro a una variabile
$totale = $prezzo_smartphone_no_iva + ($prezzo_smartphone_no_iva * (IVA / 100) );
// Aggiungiamo la valuta
$totale_con_valuta = $totale . ' ' . VALUTA;
// Elaboriamo una stringa
echo "Il prezzo di questo smartphone è " . $totale_con_valuta;
?>
Prenditi del tempo per analizzare questa porzione di codice.
Infine, ecco il risultato:
Il prezzo di questo smartphone è 608.78 €