Szukaj…
Składnia
- Zdefiniuj (ciąg $ nazwa, mieszana $ wartość [, bool $ case_insensitive = false])
- const CONSTANT_NAME = WARTOŚĆ;
Uwagi
Stałe są używane do przechowywania wartości, których później nie należy zmieniać. Są również często używane do przechowywania parametrów konfiguracyjnych, szczególnie tych, które definiują środowisko (program / produkcja).
Stałe mają typy takie jak zmienne, ale nie wszystkie typy mogą być użyte do inicjalizacji stałej. Obiekty i zasoby nie mogą być w ogóle używane jako wartości stałych. Tablice mogą być używane jako stałe począwszy od PHP 5.6
Niektóre stałe nazwy są zastrzeżone przez PHP. Należą do nich zarówno true
, false
, null
jak i wiele stałych specyficznych dla modułu.
Stałe są zwykle nazywane przy użyciu wielkich liter.
Sprawdzanie, czy zdefiniowano stałą
Prosta kontrola
Aby sprawdzić, czy stała jest zdefiniowana, użyj defined
funkcji. Zauważ, że ta funkcja nie dba o wartość stałej, obchodzi ją tylko, czy stała istnieje, czy nie. Nawet jeśli wartość stałej jest równa null
lub false
funkcja nadal zwróci 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
}
Zauważ, że stała staje się „widoczna” w twoim kodzie dopiero po linii, w której ją zdefiniowałeś:
<?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"
}
Uzyskiwanie wszystkich zdefiniowanych stałych
Aby uzyskać wszystkie zdefiniowane stałe, w tym te utworzone przez PHP, użyj funkcji get_defined_constants
:
<?php
$constants = get_defined_constants();
var_dump($constants); // pretty large list
Aby uzyskać tylko te stałe, które zostały zdefiniowane przez aplikację, należy wywołać funkcję na początku i na końcu skryptu (zwykle po zakończeniu procesu ładowania):
<?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',
)
*/
Czasami jest przydatny do debugowania
Definiowanie stałych
Stałe są tworzone za pomocą instrukcji const
lub funkcji define
. Konwencja polega na użyciu wielkich liter dla stałych nazw.
Zdefiniuj stałą za pomocą jawnych wartości
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
Zdefiniuj stałą, używając innej stałej
jeśli masz jedną stałą, możesz na jej podstawie zdefiniować inną:
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));
Stałe zarezerwowane
Niektóre stałe nazwy są zastrzeżone przez PHP i nie można ich przedefiniować. Wszystkie te przykłady zakończą się niepowodzeniem:
define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded
Zostanie wydane zawiadomienie:
Constant ... already defined in ...
Definicje warunkowe
Jeśli masz kilka plików, w których możesz zdefiniować tę samą zmienną (na przykład konfigurację główną, a następnie konfigurację lokalną), wówczas następująca składnia może pomóc w uniknięciu konfliktów:
defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"
const
vs define
define
jest wyrażeniem wykonawczym, podczas gdy const
jest czasem kompilacji.
Zatem define
pozwala na wartości dynamiczne (tj. Wywołania funkcji, zmienne itp.), A nawet nazwy dynamiczne i definicję warunkową. Jednak zawsze definiuje się względem głównej przestrzeni nazw.
const
jest statyczny (jak w dopuszcza tylko operacje z innymi stałymi, skalarami lub tablicami i tylko ich ograniczony zestaw, tak zwane stałe wyrażenia skalarne , tj. operatory arytmetyczne, logiczne i porównania, a także dereferencje tablicowe), ale są automatycznie przestrzenią nazw z prefiksem aktualnie aktywnej przestrzeni nazw.
const
obsługuje tylko inne stałe i skalary jako wartości i nie ma operacji.
Stałe klasowe
Stałe mogą być definiowane wewnątrz klas za pomocą słowa kluczowego 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;
Jest to przydatne do przechowywania rodzajów przedmiotów.
<?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
Stałe tablice
Tablice mogą być używane jako stałe zwykłe i stałe klas od wersji PHP 5.6 i późniejszych:
Przykład stałej klasy
class Answer {
const C = [2,4];
}
print Answer::C[1] . Answer::C[0]; // 42
Prosty stały przykład
const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42
Również z wersji PHP 7.0 funkcjonalność została przeniesiona do define
funkcji dla zwykłych stałych.
define('VALUES', [2, 3]);
define('MY_ARRAY', [
1,
VALUES,
]);
print MY_ARRAY[1][1]; // 3
Używanie stałych
Aby użyć stałej, po prostu użyj jej nazwy:
if (EARTH_IS_FLAT) {
print "Earth is flat";
}
print APP_ENV_UPPERCASE;
lub jeśli nie znasz wcześniej nazwy stałej, użyj funkcji 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);