Есть ли в PHP эквивалент #ifdef в C / C ++? - PullRequest
13 голосов
/ 02 марта 2012

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

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

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

Ответы [ 6 ]

24 голосов
/ 02 марта 2012

Использование defined() и define().

if (!defined('BASEPATH')) {
    define('BASEPATH', '/mnt/www');
}
6 голосов
/ 02 марта 2012
if(!defined('BASEPATH')) {
    define('BASEPATH', '/mnt/www');
}

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

5 голосов
/ 10 сентября 2012

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

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

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

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

Где ... обозначает заполнение поля.

См. Также: function_exists (PHP 4, PHP 5) (с комментариями).

4 голосов
/ 02 марта 2012

Использование определено () функция

if(!defined("constantname")) {
   define("constantname", "value");
}
2 голосов
/ 05 марта 2012

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

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

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

1 голос
/ 02 марта 2012

Использование определено () :

<?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;
}
?>
...