首页 > 解决方案 > PHP定义的奇怪行为()

问题描述

SetEnv YII_ENV prod在 apache vhost 文件中设置了一个 env var,因为我的项目中有以下行:

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() 返回 false。我知道我可以重写条件,但我真的很好奇为什么会这样。

标签: phpenvironment-variablesapache2defined

解决方案


解释 -defined功能

检查给定的命名常量是否存在

因此,defined('YII_ENV')检查是否定义常量YII_ENV

但是同名的环境变量YII_ENV不是常量,而是另一个实体。

这就是为什么你得到你的输出,这是完全正确的。


推荐阅读