为什么你可以在命名空间中覆盖true而不是false?

时间:2012-11-30 13:11:08

标签: php constants

根据我对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覆盖falsefalse覆盖true

1 个答案:

答案 0 :(得分:11)

在您的第一个define之后,true现在定义为false,因此Foo\\false设置为false

为了让它按预期运行,您应该将Foo\\trueFoo\\false分别设置为truefalse的{​​{3}}值:

define('Foo\\true', \false);
define('Foo\\false', \true);