在php.net中有关类/对象示例的手册中,这个极度不推荐的comment was left
为了避免出现“未定义变量”错误,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";
}
}
请有人可以解释为什么这是个坏建议或为什么拒绝投票的人是错误的。
答案 0 :(得分:1)
首先,通常应该避免使用全局变量,除非确实有必要,并且在这种情况下显然不是必需的。全局变量可能会导致很多问题,其中许多是由评论者here指出的(这是关于c ++的,但是在所有语言中概念都是相同的。)
但是,他正确地指出,$global
中的键不存在时,文档中提供的代码可能导致“未定义的索引”错误。
但是解决方案绝对不是仅仅为此检查创建一个空的全局变量。实际上,有一个专门设计用于检查数组是否具有特定键的PHP函数:$_GLOBALS
。因此正确的解决方案是:
array_key_exists()
最后,将法语文本发布在英语论坛上不是很友好。互联网上的通用交流语言是英语,这种行为可能会使他人自大。