为什么类父母功能不应具有全局$$ Obj语句

时间:2019-12-19 10:43:02

标签: php class global-variables undefined

在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";
        }
    }

请有人可以解释为什么这是个坏建议或为什么拒绝投票的人是错误的。

1 个答案:

答案 0 :(得分:1)

首先,通常应该避免使用全局变量,除非确实有必要,并且在这种情况下显然不是必需的。全局变量可能会导致很多问题,其中许多是由评论者here指出的(这是关于c ++的,但是在所有语言中概念都是相同的。)

但是,他正确地指出,$global中的键不存在时,文档中提供的代码可能导致“未定义的索引”错误。

但是解决方案绝对不是仅仅为此检查创建一个空的全局变量。实际上,有一个专门设计用于检查数组是否具有特定键的PHP函数:$_GLOBALS。因此正确的解决方案是:

array_key_exists()

最后,将法语文本发布在英语论坛上不是很友好。互联网上的通用交流语言是英语,这种行为可能会使他人自大。