php - 为什么类父函数不应该有一个全局 $$Obj 语句
问题描述
在类/对象示例的 php.net 手册中,留下了这个被高度评价的评论
为了避免“未定义变量”错误,class_parentage 函数应该具有全局 $$obj 语句:
function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($GLOBALS[$obj], $class)) {
echo "L'objet $obj appartient à la classe " . get_class($$obj);
echo " une sous-classe de $class\n";
} else {
echo "L'object $obj n'appartient pas à une sous-classe $class\n";
}
}
请有人解释为什么这是一个不好的建议或为什么反对者是错误的。
解决方案
首先,您通常应该避免使用全局变量,除非确实有必要并且在这种情况下显然不是。全局变量可能会导致许多问题,其中许多是评论者在此处指出的(这是关于 c++,但所有语言中的概念都是相同的)。
但是,他指出文档中提供的代码可能会导致“未定义索引”错误,$global
当$_GLOBALS
.
但解决方案绝对不是为了这个检查而简单地创建一个空的全局变量。事实上,有一个专门设计用于检查数组是否具有特定键的 php 函数:array_key_exists()
. 所以正确的解决方案是:
if(!array_key_exists($global, $_GLOBALS)){
echo "class does not exist"
}
最后,在英语论坛上发布法语文本不是很友好。互联网的通用交流语言是英语,这样的行为在别人看来可能显得傲慢。
推荐阅读
- php - 通过ajax上传文件时无法打开流
- android - 如何修复反应导航中的键盘错误?
- wordpress - php参数为arg的自定义查询分页问题
- python - aiohttp 将 %3A 替换为:
- javascript - 垫表角度的颜色单元格
- python - 在 Python turtle 中用颜色块和数字绘制板
- python - Cartpole - 具有 1 个隐藏层的简单反向传播?
- keyboard-shortcuts - (firefox)浏览器中的Rstudio服务器:快捷方式之间的冲突
- javascript - 如何在 Node.js 中为 MongoClient 方法构造 Promise 包装器
- scala - 错误:传输错误 202:绑定失败:无法分配请求的地址