php - `while (true)` 与 `while (\true)` 有什么区别?

标签 php

while (true)while (\true) 之间有什么区别,最重要的是,任何人都可以阐明为什么 boolean 受到影响PHP 中的命名空间 ?

最佳答案

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

namespace Foo;
const true = false; // Cannot redeclare constant 'true'

仍然可以使用 ''define()'' 覆盖这样的常量:

namespace Foo;
define('Foo\true', false);
var_dump(true); // bool(false)

然而,这是不支持的功能(它可能被称为错误),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 情况下而不是在“正常”情况下的原因是实现中的错误。对于 constexprs,替换发生在名称解析之前,而对于普通代码,它发生在名称解析之后。

正确的实现是总是在名称解析之后进行替换,但在替换期间要特别考虑 truefalsenull。我计划在 PHP 7 中解决这个问题。

关于php - `while (true)` 与 `while (\true)` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023818/

相关文章:

php - 循环读取文件的每一行到它自己的数组

php - 在 phpmyadmin 中创建过程时出错

php - 如何循环遍历 PDO 语句并在 if 语句上写入数据

php - CURL + POST + 多部分/表单数据

PHP sqrt() 返回 NAN

php - 使用来自同一行的 id 单击带有 XPath 的按钮

php - 什么是我的查询获得快速结果的好索引?

php - 表单选择具有最大组合可选值的字段

php - 为什么我不能从没有完整命名空间的字符串实例化新对象

php - 从用户输入中获取字母数字字符串的安全方法? (没有 preg_replace)