首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在PHP中重新定义常量而不会出错

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

Stack Overflow用户
提问于 2019-06-29 13:03:47
回答 2查看 708关注 0票数 0

正如我所知,我们不能在PHP中重新定义常量。所以如果我这么做了

代码语言:javascript
复制
define("DEVELOPMENT", true);

理论上我不能用以下方法重新定义它:

代码语言:javascript
复制
define("DEVELOPMENT", false); (or) const DEVELOPMENT = false;

问题是PHP让我这么做。它允许我重新定义一个常量,而不会抛出任何错误。显示错误已打开(我有任何其他错误):

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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);

因此,更多信息请参考官方的文档,并查看示例。

票数 0
EN

Stack Overflow用户

发布于 2019-06-29 14:16:21

没有错误,但有通知。

注意:已定义的常量开发

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

代码语言:javascript
复制
error_reporting(E_ALL); // E_ALL reports all problems including notices, warnings and deprecations

当然,因为它是一个常量,第二个define变成了不可执行的代码,因为您不能重新定义这个常量,所以这个值保持原来定义的样子。

代码语言:javascript
复制
define("DEVELOPMENT", true);
define("DEVELOPMENT", false);

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

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

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

代码语言:javascript
复制
define("MY_COOL_LIBRARY_DEVELOPMENT", false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56817769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档