Подтвердить что ты не робот

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

Я пытаюсь определить константу, но я не хочу переопределять ее, если она уже определена. Здесь образец C:

#ifndef BASEPATH
#define BASEPATH /mnt/www
#endif

Каков самый элегантный способ сделать это в PHP?

4b9b3361

Ответ 1

Используйте defined() и define().

if (!defined('BASEPATH')) {
    define('BASEPATH', '/mnt/www');
}

Ответ 3

В C, #ifdef часто включает в себя запись/включение/выключение пользовательского кода на основе того, существует или нет определение. Хотя ОП не искал ответ, который следует, пользователи поисковых систем могут быть заинтересованы в получении расширенного ответа. (Этот вопрос помог мне RTM найти следующий ответ.)

Если у вас есть .php файл, который включен несколько раз, может быть удобно объявить функцию только в том случае, если она еще не была объявлена ​​предыдущим включением того же файла. Удобство, в этом случае, держит тесно связанный код в том же файле, вместо того, чтобы помещать его в отдельный файл include_once.php и излишне отдельный код, который не должен быть обычно повторно использован в других контекстах (файлы).

Так как кажется бесполезным/неподходящим для повторного объявления функций несколько раз, оказывается, что возможна возможность # ifdef-подобной конструкции в PHP:

if (! function_exists('myfunc'))
{
  function myfunc(...)
  {
    ...
  }
}

Где ... указывает ваш заполняющий пробел.

Смотрите также: function_exists (PHP 4, PHP 5) (w/comments).

Ответ 4

Используйте defined() function

if(!defined("constantname")) {
   define("constantname", "value");
}

Ответ 5

Используйте 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;
}
?>

Ответ 6

Это сжатое переписывание ответа Раду выше (и всех остальных).

defined('BASE_PATH') || define('BASE_PATH', '/mnt/www/');    

Что это. Если defined('BASE_PATH') оценивается как true, остальная часть условного значения никогда не будет оценена. Если он возвращает false, вторая половина условного выражения оценивается и определяется BASE_PATH.