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