0

据我所知,我们无法在 PHP 中重新定义常量。所以如果我这样做:

define("DEVELOPMENT", true);

理论上我无法使用以下方法重新定义它:

define("DEVELOPMENT", false); (or) const DEVELOPMENT = false;

问题是 PHP 让我这样做。它让我重新定义一个常量而不会引发任何错误。显示错误开启(我收到任何其他错误):

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

怎么做才能重新定义常量,如果我尝试会出错?

我的 PHP 版本是 7.2.17

4

2 回答 2

0

报告所有php错误

error_reporting(E_ALL);

报告除通知之外的所有 php 错误

error_reporting(E_ALL & ~E_NOTICE);

在您的情况下,您正在重新定义一个已经定义的常量,显示 PHP 会抛出一个通知。通过使用

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

您是在告诉 PHP 不要报告任何类型的通知或警告。你应该删除它们。
要获得所有警告和通知,请使用

error_reporting(E_ALL);

有关更多信息,请参阅官方文档,并查看示例。

于 2019-06-29T13:30:41.257 回答
0

没有错误,但有通知。

注意:Constant DEVELOPMENT 已经定义

这就是为什么永远不要关闭通知很重要的原因。

error_reporting(E_ALL); // E_ALL reports all problems including notices, warnings and deprecations

当然,因为它是一个常量,所以第二段define代码就变成了不可执行的代码,因为你不能重新定义常量,所以它的值仍然是最初定义的。

define("DEVELOPMENT", true);
define("DEVELOPMENT", false);

var_dump(DEVELOPMENT); // prints out bool(true)

在线试用:https ://3v4l.org/7i8XL

如果您有小型个人项目,这可能不是一个大问题,但由于常量始终位于全局命名空间中,因此在具有大量外部依赖项的大型项目中,一些常量可能会相互冲突。如果您启用了 PHP 通知,您可能会更快地看到这个问题。另一种选择是始终创建正确命名的常量,其名称不太可能与其他常量冲突。

define("MY_COOL_LIBRARY_DEVELOPMENT", false);
于 2019-06-29T14:16:21.903 回答