downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

Costanti magiche> <Costanti
[edit] Last updated: Tue, 21 May 2013

view this page in

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.



Costanti magiche> <Costanti
[edit] Last updated: Tue, 21 May 2013
 
add a note add a note User Contributed Notes Sintassi - [3 notes]
up
1
0gb dot us at 0gb dot us
1 year 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
3
uramihsayibok, gmail, com
3 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
0
timucinbahsi at gmail dot com
1 year 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
?>

 
show source | credits | sitemap | contact | advertising | mirror sites