我可以在PHP中重新定义常量而不会出现错误

时间:2019-06-29 13:03:47

标签: php constants defined redefine

据我所知,我们无法在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

2 个答案:

答案 0 :(得分: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);

有关更多信息,请参见官方doc,并查看示例。

答案 1 :(得分:0)

没有错误,但有一个提示。

  

注意:已经定义了持续开发

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

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);