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

eis*_*erg 2 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
);
Run Code Online (Sandbox Code Playgroud)

将返回:

bool(false)
bool(false)
bool(true)
bool(false)
Run Code Online (Sandbox Code Playgroud)

为什么会覆盖true使用false,但不能falsetrue

Tim*_*per 11

在你的第一个之后define,true现在定义为false,所以Foo\\false设置为 false.

得到它的工作如预期,你应该要设置Foo\\trueFoo\\false全球空间的价值truefalse分别为:

define('Foo\\true', \false);
define('Foo\\false', \true);
Run Code Online (Sandbox Code Playgroud)

  • Bingo bango bongo! (3认同)