PHP 定义的奇怪行为()

Strange behaviour of PHP defined()

我在 apache 虚拟主机文件中设置了一个环境变量 SetEnv YII_ENV prod,因为我的项目中有以下行:

defined('YII_ENV') or define('YII_ENV', 'dev');

问题是 defined() 的行为真的很奇怪。我试过以下代码:

echo getenv('YII_ENV');
echo '<br>';
var_dump(defined('YII_ENV'));

结果:

prod
bool(false)

我可以回显 var 的值,但 defined() returns 为假。我知道我可以重写条件,但我真的很好奇为什么会这样。

解释 - defined 函数

Checks whether a given named constant exists

因此,defined('YII_ENV') 检查 constant YII_ENV 是否 defined.

但具有相同名称 YII_ENV 环境变量 不是 常量 ,它是另一个实体。

这就是你得到输出的原因,这是完全正确的。