Я пытаюсь определить константу, но я не хочу переопределять ее, если она уже определена. Здесь образец C:
#ifndef BASEPATH
#define BASEPATH /mnt/www
#endif
Каков самый элегантный способ сделать это в PHP?
Я пытаюсь определить константу, но я не хочу переопределять ее, если она уже определена. Здесь образец C:
#ifndef BASEPATH
#define BASEPATH /mnt/www
#endif
Каков самый элегантный способ сделать это в PHP?
Используйте defined()
и define()
.
if (!defined('BASEPATH')) {
define('BASEPATH', '/mnt/www');
}
if(!defined('BASEPATH')) {
define('BASEPATH', '/mnt/www');
}
В C, #ifdef часто включает в себя запись/включение/выключение пользовательского кода на основе того, существует или нет определение. Хотя ОП не искал ответ, который следует, пользователи поисковых систем могут быть заинтересованы в получении расширенного ответа. (Этот вопрос помог мне RTM найти следующий ответ.)
Если у вас есть .php файл, который включен несколько раз, может быть удобно объявить функцию только в том случае, если она еще не была объявлена предыдущим включением того же файла. Удобство, в этом случае, держит тесно связанный код в том же файле, вместо того, чтобы помещать его в отдельный файл include_once
.php и излишне отдельный код, который не должен быть обычно повторно использован в других контекстах (файлы).
Так как кажется бесполезным/неподходящим для повторного объявления функций несколько раз, оказывается, что возможна возможность # ifdef-подобной конструкции в PHP:
if (! function_exists('myfunc'))
{
function myfunc(...)
{
...
}
}
Где ...
указывает ваш заполняющий пробел.
Смотрите также: function_exists (PHP 4, PHP 5) (w/comments).
Используйте defined() function
if(!defined("constantname")) {
define("constantname", "value");
}
Используйте defined():
<?php
/* Note the use of quotes, this is important. This example is checking
* if the string 'TEST' is the name of a constant named TEST */
if (defined('TEST')) {
echo TEST;
}
?>
Это сжатое переписывание ответа Раду выше (и всех остальных).
defined('BASE_PATH') || define('BASE_PATH', '/mnt/www/');
Что это. Если defined('BASE_PATH')
оценивается как true, остальная часть условного значения никогда не будет оценена. Если он возвращает false, вторая половина условного выражения оценивается и определяется BASE_PATH
.