正如我所知,我们不能在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
发布于 2019-06-29 13:30:41
报告所有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-29 14:16:21
没有错误,但有通知。
注意:已定义的常量开发
这就是为什么永远不要关闭通知是很重要的。
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);https://stackoverflow.com/questions/56817769
复制相似问题