Я пытаюсь определить константу, но я не хочу переопределять ее, если она уже определена. Вот пример 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).
Использовать определенную () функцию
if(!defined("constantname")) { define("constantname", "value"); }
Использовать определенные () :
<?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
.