PHP
costanti
Ricerca…
Sintassi
- define (stringa $ nome, misto $ valore [, bool $ case_insensitive = false])
- const CONSTANT_NAME = VALUE;
Osservazioni
Le costanti vengono utilizzate per memorizzare i valori che non dovrebbero essere modificati in seguito. Inoltre sono spesso utilizzati per memorizzare i parametri di configurazione, in particolare quelli che definiscono l'ambiente (dev / produzione).
Le costanti hanno tipi come variabili ma non tutti i tipi possono essere utilizzati per inizializzare una costante. Oggetti e risorse non possono essere utilizzati come valori per le costanti. Le matrici possono essere utilizzate come costanti a partire da PHP 5.6
Alcuni nomi costanti sono riservati da PHP. Questi includono true
, false
, null
e molte costanti specifiche del modulo.
Le costanti vengono generalmente denominate usando lettere maiuscole.
Verifica se la costante è definita
Controllo semplice
Per verificare se la costante è definita, utilizzare la funzione defined
. Si noti che questa funzione non interessa il valore della costante, si preoccupa solo se la costante esiste o meno. Anche se il valore della costante è null
o false
la funzione restituirà comunque true
.
<?php
define("GOOD", false);
if (defined("GOOD")) {
print "GOOD is defined" ; // prints "GOOD is defined"
if (GOOD) {
print "GOOD is true" ; // does not print anything, since GOOD is false
}
}
if (!defined("AWESOME")) {
define("AWESOME", true); // awesome was not defined. Now we have defined it
}
Nota che la costante diventa "visibile" nel tuo codice solo dopo la linea in cui l'hai definita:
<?php
if (defined("GOOD")) {
print "GOOD is defined"; // doesn't print anyhting, GOOD is not defined yet.
}
define("GOOD", false);
if (defined("GOOD")) {
print "GOOD is defined"; // prints "GOOD is defined"
}
Ottenere tutte le costanti definite
Per ottenere tutte le costanti definite, comprese quelle create da PHP, utilizzare la funzione get_defined_constants
:
<?php
$constants = get_defined_constants();
var_dump($constants); // pretty large list
Per ottenere solo le costanti definite dalla tua app, chiama la funzione all'inizio e alla fine dello script (normalmente dopo il processo di bootstrap):
<?php
$constants = get_defined_constants();
define("HELLO", "hello");
define("WORLD", "world");
$new_constants = get_defined_constants();
$myconstants = array_diff_assoc($new_constants, $constants);
var_export($myconstants);
/*
Output:
array (
'HELLO' => 'hello',
'WORLD' => 'world',
)
*/
A volte è utile per il debug
Definire costanti
Le costanti vengono create utilizzando l'istruzione const
o la funzione define
. La convenzione è di utilizzare lettere MAIUSCOLE per nomi costanti.
Definisci costante usando valori espliciti
const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const "UNKNOWN" = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok
const APP_LANGUAGES = ["de", "en"]; // arrays
define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays
Definire costante usando un'altra costante
se hai una costante puoi definirne un'altra basata su di essa:
const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
// the above example (a function call) does not work with const:
// const TIME = time(); # fails with a fatal error! Not a constant scalar expression
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);
const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations
define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));
Costanti riservate
Alcuni nomi costanti sono riservati da PHP e non possono essere ridefiniti. Tutti questi esempi falliranno:
define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded
E verrà pubblicato un avviso:
Constant ... already defined in ...
Condizionale definisce
Se si dispone di diversi file in cui è possibile definire la stessa variabile (ad esempio, la configurazione principale quindi la configurazione locale), la seguente sintassi può aiutare a evitare conflitti:
defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"
const
vs define
define
è un'espressione runtime mentre const
una compilazione time one.
Quindi define
consente valori dinamici (es. Chiamate di funzione, variabili ecc.) E persino nomi dinamici e definizioni condizionali. Tuttavia, sta sempre definendo relativo al namespace di root.
const
è statico (come in consente solo operazioni con altre costanti, scalari o matrici, e solo un insieme limitato di esse, le cosiddette espressioni scalari costanti , cioè aritmetiche, logiche e operatori di confronto, nonché il dereferenziazione dell'array), ma sono automaticamente spazio dei nomi preceduto dallo spazio dei nomi attualmente attivo.
const
supporta solo altre costanti e scalari come valori e nessuna operazione.
Costanti di classe
Le costanti possono essere definite all'interno delle classi usando una parola chiave const
.
class Foo {
const BAR_TYPE = "bar";
// reference from inside the class using self::
public function myMethod() {
return self::BAR_TYPE;
}
}
// reference from outside the class using <ClassName>::
echo Foo::BAR_TYPE;
Questo è utile per memorizzare tipi di oggetti.
<?php
class Logger {
const LEVEL_INFO = 1;
const LEVEL_WARNING = 2;
const LEVEL_ERROR = 3;
// we can even assign the constant as a default value
public function log($message, $level = self::LEVEL_INFO) {
echo "Message level " . $level . ": " . $message;
}
}
$logger = new Logger();
$logger->log("Info"); // Using default value
$logger->log("Warning", $logger::LEVEL_WARNING); // Using var
$logger->log("Error", Logger::LEVEL_ERROR); // using class
Array costanti
Le matrici possono essere utilizzate come semplici costanti e costanti di classe dalla versione PHP 5.6 in poi:
Esempio costante di classe
class Answer {
const C = [2,4];
}
print Answer::C[1] . Answer::C[0]; // 42
Semplice esempio costante
const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42
Anche dalla versione PHP 7.0 questa funzionalità è stata portata alla funzione define
per le costanti semplici.
define('VALUES', [2, 3]);
define('MY_ARRAY', [
1,
VALUES,
]);
print MY_ARRAY[1][1]; // 3
Usando le costanti
Per usare la costante usa semplicemente il suo nome:
if (EARTH_IS_FLAT) {
print "Earth is flat";
}
print APP_ENV_UPPERCASE;
o se non si conosce in anticipo il nome della costante, utilizzare la funzione constant
:
// this code is equivalent to the above code
$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";
if (constant($const1)) {
print "Earth is flat";
}
print constant($const2);