PHP
Константы
Поиск…
Синтаксис
- define (string $ name, mixed $ value [, bool $ case_insensitive = false])
- const CONSTANT_NAME = VALUE;
замечания
Константы используются для хранения значений, которые не должны быть изменены позже. Они также часто используются для хранения параметров конфигурации, особенно тех, которые определяют среду (dev / production).
Константы имеют такие типы, как переменные, но не все типы могут использоваться для инициализации константы. Объекты и ресурсы не могут использоваться как значения для констант вообще. Массивы могут использоваться как константы, начиная с PHP 5.6
Некоторые постоянные имена зарезервированы PHP. К ним относятся true
, false
, null
а также многие константы, специфичные для модуля.
Константы обычно называются с использованием прописных букв.
Проверка константы
Простая проверка
Чтобы проверить, определена ли константа, используйте defined
функцию. Обратите внимание, что эта функция не заботится о значении константы, она заботится только о том, существует ли константа или нет. Даже если значение константы равно null
или false
функция все равно вернет 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
}
Обратите внимание, что константа становится «видимой» в вашем коде только после строки, в которой вы ее определили:
<?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"
}
Получение всех определенных констант
Чтобы получить все определенные константы, в том числе созданные PHP, используйте функцию get_defined_constants
:
<?php
$constants = get_defined_constants();
var_dump($constants); // pretty large list
Чтобы получить только те константы, которые были определены вашим приложением, вызовите функцию в начале и в конце вашего скрипта (обычно после процесса начальной загрузки):
<?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',
)
*/
Иногда это полезно для отладки
Определение констант
Константы создаются с помощью инструкции const
или функции define
. Соглашением является использование букв UPPERCASE для постоянных имен.
Определить константу с использованием явных значений
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
Определить константу с использованием другой константы
если у вас есть одна константа, вы можете определить другую на основе этого:
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));
Зарезервированные константы
Некоторые константные имена зарезервированы PHP и не могут быть переопределены. Все эти примеры потерпят неудачу:
define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded
И выдается Уведомление:
Constant ... already defined in ...
Условные определения
Если у вас есть несколько файлов, где вы можете определить одну и ту же переменную (например, вашу основную конфигурацию, а затем локальную конфигурацию), следующий синтаксис может помочь избежать конфликтов:
defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"
const
vs define
define
- это выражение времени выполнения, а const
- время компиляции.
Таким образом, define
позволяет использовать динамические значения (т. Е. Вызовы функций, переменные и т. Д.) И даже динамические имена и условное определение. Тем не менее он всегда определяет относительно корневого пространства имен.
const
является статичным (как в случае допускаются только операции с другими константами, скалярами или массивами и только ограниченный набор из них, так называемые константные скалярные выражения , то есть арифметические, логические и операторы сравнения, а также разыменование массива), но они автоматически являются пространством имен с префиксом текущего активного пространства имен.
const
поддерживает только другие константы и скаляры как значения, а не операции.
Константы классов
Константы могут быть определены внутри классов с использованием ключевого слова 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;
Это полезно для хранения типов предметов.
<?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
Постоянные массивы
Массивы могут использоваться как простые константы и константы класса из версии PHP 5.6 и далее:
Пример константы класса
class Answer {
const C = [2,4];
}
print Answer::C[1] . Answer::C[0]; // 42
Пример простой константы
const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42
Также из версии PHP 7.0 эта функция была перенесена на функцию define
для простых констант.
define('VALUES', [2, 3]);
define('MY_ARRAY', [
1,
VALUES,
]);
print MY_ARRAY[1][1]; // 3
Использование констант
Чтобы использовать константу, просто используйте ее имя:
if (EARTH_IS_FLAT) {
print "Earth is flat";
}
print APP_ENV_UPPERCASE;
или если вы заранее не знаете имя константы, используйте 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);