Suche…


Syntax

  • define (String $ name, gemischter $ value [, bool $ case_insensitive = false])
  • const CONSTANT_NAME = VALUE;

Bemerkungen

Konstanten werden zum Speichern der Werte verwendet, die später nicht geändert werden sollen. Sie werden auch häufig zum Speichern der Konfigurationsparameter verwendet, insbesondere der Parameter, die die Umgebung definieren (dev / production).

Konstanten haben Typen wie Variablen, aber nicht alle Typen können zum Initialisieren einer Konstante verwendet werden. Objekte und Ressourcen können überhaupt nicht als Werte für Konstanten verwendet werden. Arrays können ab PHP 5.6 als Konstanten verwendet werden

Einige konstante Namen werden von PHP reserviert. Dazu gehören true , false , null sowie viele modulspezifische Konstanten.

Konstanten werden normalerweise mit Großbuchstaben benannt.

Prüfen ob Konstante definiert ist

Einfach überprüfen

Um zu überprüfen, ob eine Konstante definiert ist, verwenden Sie die defined Funktion. Beachten Sie, dass diese Funktion sich nicht für den Wert der Konstante interessiert, sondern nur, ob die Konstante existiert oder nicht. Selbst wenn der Wert der Konstante null oder false die Funktion immer noch 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 
}

Beachten Sie, dass die Konstante in Ihrem Code erst nach der Zeile, in der Sie sie definiert haben, "sichtbar" wird:

<?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"
}

Alle definierten Konstanten erhalten

Um alle definierten Konstanten zu erhalten, einschließlich der von PHP erstellten, verwenden Sie die Funktion get_defined_constants :

<?php

$constants = get_defined_constants();
var_dump($constants); // pretty large list

Um nur die Konstanten zu erhalten, die von Ihrer App definiert wurden, rufen Sie die Funktion am Anfang und am Ende Ihres Skripts auf (normalerweise nach dem Bootstrap-Prozess):

<?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',
) 
*/

Es ist manchmal nützlich für das Debuggen

Konstanten definieren

Konstanten werden mit der const Anweisung oder der define Funktion erstellt. Konvention ist die Verwendung von GROSSBUCHSTABEN für konstante Namen.

Definiere Konstante mit expliziten Werten

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

Konstante mit einer anderen Konstante definieren

Wenn Sie eine Konstante haben, können Sie auf dieser Basis eine andere definieren:

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

Reservierte Konstanten

Einige konstante Namen werden von PHP reserviert und können nicht neu definiert werden. Alle diese Beispiele werden fehlschlagen:

define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded

Und eine Mitteilung wird ausgegeben:

Constant ... already defined in ...

Bedingt definiert

Wenn Sie über mehrere Dateien verfügen, in denen Sie dieselbe Variable definieren können (beispielsweise Ihre Hauptkonfiguration als Ihre lokale Konfig), kann die folgende Syntax dazu beitragen, Konflikte zu vermeiden:

defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"

const vs define

define ist ein Laufzeitausdruck, während const eine Uhrzeit ist.

define erlaubt somit dynamische Werte (dh Funktionsaufrufe, Variablen usw.) und sogar dynamische Namen und bedingte Definition. Es ist jedoch immer relativ zum Root-Namespace definiert.

const ist statisch (da es nur Operationen mit anderen Konstanten, Skalaren oder Arrays erlaubt, und nur eine begrenzte Menge davon die sogenannten konstanten Skalarausdrücke , dh arithmetische Operatoren, logische Operatoren, Vergleichsoperatoren sowie Array-Dereferenzierung), sind aber automatisch Namensräume mit dem aktuell aktiven Namespace vorangestellt.

const unterstützt nur andere Konstanten und Skalare als Werte und keine Operationen.

Klassenkonstanten

Konstanten können innerhalb von Klassen mit einem const Schlüsselwort definiert werden.

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;

Dies ist nützlich zum Speichern von Elementtypen.

<?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

Konstante Arrays

Arrays können ab Version PHP 5.6 als reine Konstanten und Klassenkonstanten verwendet werden:

Klassenkonstante Beispiel

class Answer {
    const C = [2,4];
}

print Answer::C[1] . Answer::C[0]; // 42

Einfaches konstantes Beispiel

const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42

Ab Version PHP 7.0 wurde diese Funktionalität auch auf die define für einfache Konstanten portiert.

define('VALUES', [2, 3]);
define('MY_ARRAY', [
    1,
    VALUES,
]);

print MY_ARRAY[1][1]; // 3

Konstanten verwenden

Um die Konstante zu verwenden, verwenden Sie einfach ihren Namen:

if (EARTH_IS_FLAT) {
    print "Earth is flat";
}

print APP_ENV_UPPERCASE;

oder wenn Sie den Namen der Konstante im Voraus nicht kennen, verwenden Sie die 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow