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);


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow