Имеет ли PHP эквивалент #ifdef для C / C ++?

Я пытаюсь определить константу, но я не хочу переопределять ее, если она уже определена. Вот пример 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'); } 

http://us3.php.net/manual/en/function.defined.php

В 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 .