Php while(true)`vs`while(\true)`之间有什么区别?

Php while(true)`vs`while(\true)`之间有什么区别?,php,Php,while(true)与while(\true)之间有什么区别?最重要的是,谁能澄清boolean为什么受PHP中命名空间的影响?在PHPtrue中,false和null是常量,它们在名称空间中受到保护,不会被覆盖。因此,以下代码无效: namespace Foo; const true = false; // Cannot redeclare constant 'true' 仍然可以使用“”define()''覆盖此类常量: 然而,这是不受支持的功能(它可能被称为bug),PHP可以自由地假

while(true)
while(\true)
之间有什么区别?最重要的是,谁能澄清
boolean
为什么受
PHP
中命名空间的影响?

在PHP
true
中,
false
null
是常量,它们在名称空间中受到保护,不会被覆盖。因此,以下代码无效:

namespace Foo;
const true = false; // Cannot redeclare constant 'true'
仍然可以使用“”define()''覆盖此类常量:

然而,这是不受支持的功能(它可能被称为bug),PHP可以自由地假设
true
不能被覆盖。例如,在constexpr上下文中使用
true
,不受上述定义的影响:

// Note: This uses eval() to make sure the define() runs before the constexpr
//       constant resolution happens

namespace Foo;
define('Foo\true', false);
var_dump(eval('namespace Foo;
static $t = true;
return $t;')); // bool(true)
替换发生在constexpr情况下而不是“正常”情况下的原因是实现中的一个bug。对于constexpr,替换发生在名称解析之前,而对于普通代码,替换发生在名称解析之后


正确的实现方法是在名称解析之后始终进行替换,但要特别说明替换期间的
true
false
null
。我计划为PHP7解决这个问题。

-“这看起来已经好了一点。但是在顶部有一个相当低效的FETCH\u常量指令。这需要对igorw\true进行名称空间查找。我们可以通过将while(true)替换为while(\true)来优化它。这将摆脱FETCH_常量调用,并将布尔值true内联:“
true/FALSE
的行为与其他常量类似自5.3.0版以来,所有函数/类/变量/常量/etc都在PHP中命名,true/FALSE/null/etc都是常量,就像您自己定义的任何常量一样。。。。它们中的大多数都在全局名称空间中,但PHP将首先检查当前名称空间,如果在当前名称空间中找不到它们,则会检查全局名称空间,因此,使用该``前缀可以防止当前名称空间的开销check@Fred-ii-
NikiC
刚刚确认调用了
FETCH_常量
,因为@Baba很高兴知道错误已经被确定。谢谢你的更新。@tftd不知道你是否在挖苦人。你知道PHP7是PHP的下一个版本吧?我们跳过了6级。我是在开玩笑。。。不过,我不知道php会跳过6,直接跳到7。我将在github上观看Alpha、Beta和早期快照我敢打赌,已经有迫不及待的出版商出版了PHP7书籍,所以当该版本没有提供所有承诺时,我们可以直接跳到8!
// Note: This uses eval() to make sure the define() runs before the constexpr
//       constant resolution happens

namespace Foo;
define('Foo\true', false);
var_dump(eval('namespace Foo;
static $t = true;
return $t;')); // bool(true)