PHP有相当于C / C ++的#ifdef吗?

时间:2012-03-02 18:37:20

标签: php constants

我正在尝试定义一个常量,但如果它已经被定义,我不想重新定义它。 这是一个C样本:

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

在PHP中执行此操作的最佳方法是什么?

6 个答案:

答案 0 :(得分:23)

使用defined()define()

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:5)

在C中,#ifdef通常涉及根据是否存在定义来编写/启用/禁用自定义代码。虽然OP没有寻找随后的答案,但搜索引擎用户可能有兴趣获得扩展答案。 (这个问题帮助RTM找到了答案。)

如果有一个包含多次的.php文件,只有当某个函数尚未由同一文件的先前包含声明时,才可以方便地声明该函数。在这种情况下,方便性是将紧密相关的代码保存在同一个文件中,而不必将其放在单独的include_once .php文件中,并且不必要地分开代码,这些代码通常不会在其他上下文中重复使用(文件)。

由于多次重新声明函数似乎很浪费/不合适,事实证明PHP中的#ifdef类似的构造是可能的:

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

...表示您填空。

另见:function_exists (PHP 4, PHP 5)(带评论)。

答案 3 :(得分:4)

使用defined()功能

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

答案 4 :(得分:1)

使用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;
}
?>

答案 5 :(得分:1)

这是对Radu上面的回答(以及其他所有人)的简要重写。

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

就是这样。如果 defined('BASE_PATH') 评估为 true ,那么条件的其余部分永远不会被评估。如果它返回 false ,则评估条件的后半部分并定义BASE_PATH