根据我对http://3v4l.org/ZCJWA以下示例的测试(对于PHP 5.3.10 - 5.4.6):
<?php
namespace Foo;
define('Foo\\true', false);
define('Foo\\false', true);
var_dump(
true,
false,
1 === 1,
1 === 0
);
将返回:
bool(false)
bool(false)
bool(true)
bool(false)
为什么可以使用true
覆盖false
但false
覆盖true
?
答案 0 :(得分:11)
在您的第一个define
之后,true
现在定义为false
,因此Foo\\false
设置为false
。
为了让它按预期运行,您应该将Foo\\true
和Foo\\false
分别设置为true
和false
的{{3}}值:
define('Foo\\true', \false);
define('Foo\\false', \true);