php - 为什么在命名空间中可以覆盖 true 但不能覆盖 false?

标签 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)

为什么可以用 false 覆盖 true 而不能用 true 覆盖 false

最佳答案

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

要使其按预期工作,您应该将 Foo\\trueFoo\\false 设置为 global space truefalse 的值分别为:

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

关于php - 为什么在命名空间中可以覆盖 true 但不能覆盖 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645954/

相关文章:

c++ - 为什么下面的程序会报错?

php - 你能在 PHP 的类中使用静态常量吗?

php - 搜索查询在 Laravel 中不起作用

php - 保存到数据库时避免冲突的事情

php - 什么最好?许多小 session 值还是一个大 session 值? PHP

c++ - const 模板参数在创建后不保留 const-ness

php - MySQL选择流派问题(php)

java - PHP、Java Applet通讯

rust - Rust 常量表达式可以使用 Default 之类的特性吗?

c++ - 如何将全局常量变量更改为可以通过函数分配的变量