据我所知,我们无法在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
答案 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)
如果您的个人项目较小,那么这可能不是一个大问题,但是由于常量始终位于全局命名空间中,因此在具有大量外部依赖项的大型项目中,某些常量可能会相互冲突。如果启用了PHP通知,则可以更快地看到此问题。另一种选择是始终创建正确命名的常量,而名称不太可能与其他常量冲突。
define("MY_COOL_LIBRARY_DEVELOPMENT", false);