Sintassi

È possibile definire una variabile utilizzando la funzione define() o utilizzando la parola chiave const all'esterno di una definizione di una classe in PHP 5.3.0. Una volta definita una costante, non è possibile cambiare il valore o renderlo indefinito.

Le costanti possono contenere solo dati di tipo scalare (boolean, integer, float e string). È possibile definire costanti come resource, ma questo dovrebbe essere evitato, perchè può causare risultati inaspettati.

Per ottenere il valore di una costante è sufficiente specificarne il nome. A differenza delle variabili, non è necessario anteporre il simbolo $ al nome di una variabile. Si può anche utilizzare la funzione constant() per leggere il valore di una costante, nel caso in cui se ne volesse ottenere il nome dinamicamente. Si utilizzi get_defined_constants() per ottenere una lista delle variabili 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 indefinita, PHP assume che si intendesse il nome della costante stessa, come se si fosse chiamata come una string (COSTANTE vs "COSTANTE"). Un errore di livello E_NOTICE verrà rilasciato quando questo accade. Leggere anche la voce del manuale sul perchè $foo[bar] è errato (a meno che prima non si definisca bar come costante con define()). Per sapere se una costante è definita, si può 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 solo con la funzione define() e non tramite assegnazione;
  • 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 solo valori scalari;

Example #1 Definizione di costanti

<?php
define("COSTANTE", "Ciao mondo.");
echo COSTANTE; // stampa "Ciao mondo."
echo Costante; // stampa "Costante" e genera una notice.
?>

Example #2 Definizione di Costanti utilizzando la parola chiave const

<?php
// Funzion in PHP 5.3.0
const CONSTANT 'Hello World';

echo 
CONSTANT;
?>

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 oppure istruzioni if.

Leggere anche Le Costanti delle Classi.

add a note add a note

User Contributed Notes 4 notes

up
4
uramihsayibok, gmail, com
4 years ago
Don't let the comparison between const (in the global context) and define() confuse you: while define() allows expressions as the value, const does not. In that sense it behaves exactly as const (in class context) does.

<?php

// this works
/**
 * Path to the root of the application
 */
define("PATH_ROOT", dirname(__FILE__));

// this does not
/**
 * Path to configuration files
 */
const PATH_CONFIG = PATH_ROOT . "/config";

// this does
/**
 * Path to configuration files - DEPRECATED, use PATH_CONFIG
 */
const PATH_CONF = PATH_CONFIG;

?>
up
-1
kuzawinski dot marcin at NOSPAM dot gmail dot com
12 days ago
Actually, there is a way, to (re)declare FALSE (also: False, false, TRUE, NULL, etc.) constant, even if it is already declared:

<?php

var_dump
(constant('I_DONT_EXIST')); // warning "Couldn't find constant I_DONT_EXIST"
var_dump(constant('FALSE'));  //no warning, output: bool(false)

define('FALSE', TRUE);

var_dump(constant('FALSE')); //output: bool(true)

// but...

var_dump(constant('false')); // output: bool(false)
var_dump(FALSE); // output: bool(false);

?>
up
-1
0gb dot us at 0gb dot us
2 years ago
While most constants are only defined in one namespace, the case-insensitive true, false, and null constants are defined in ALL namespaces. So, this is not valid:

<?php namespace false;
const
ENT_QUOTES = 'My value';
echo
ENT_QUOTES;//Outputs as expected: 'My value'

const FALSE = 'Odd, eh?';//FATAL ERROR! ?>

Fatal error: Cannot redeclare constant 'FALSE' in /Volumes/WebServer/0gb.us/test.php on line 5
up
-10
timucinbahsi at gmail dot com
2 years ago
Constant names shouldn't include operators. Otherwise php doesn't take them as part of the constant name and tries to evaluate them:

<?php
define
("SALARY-WORK",0.02); // set the proportion

$salary=SALARY-WORK*$work; // tries to subtract WORK times $work from SALARY
?>
To Top