致命错误:在第96行的非对象上调用成员函数getElementsByTagName()

时间:2015-12-12 07:11:23

标签: php

function SGElemByTagName($domNode, $tagName)
        {
            return (($this->SGP_VERSION == 5) ? $domNode->getElementsByTagName($tagName) : $domNode->get_elements_by_tagname($tagName));
        }

这就是我在96号线上所拥有的。

1 个答案:

答案 0 :(得分:1)

这意味着您的变量$domNode未指向对象,因此它无法响应方法调用。换句话说,$domNode不是您认为的类型。

正如Harikrishnan建议的那样,你可以在isset($domNode)上分支。或者,更好一点,你可以使用is_object($domNode)来验证它是一个对象,然后再尝试调用它上面的方法。如果没有有效的\DOMDocument传递给它,更好的设计就是不要调用这个方法。如果你走这条路线,你可以在方法签名中使用类型提示来强制你的代码在使用无效参数时抛出更有用的错误,如下所示:

function SGElemByTagName(\DOMDocument $domNode, $tagName) {
    # Your logic here
    $omg = $domNode->getElementsByTagName($tagName);
    # etc...
}

然后,如果你要:

SGElemByTagName('<div><h1>Oops!</h1></div>', 'h1');

您将收到有意义消息的异常:

  

传递给SGElemByTagName()的参数1必须是。的实例   DOMDocument,字符串给出......

这种方法的另一个好处是,您和其他可能稍后使用此代码的开发人员只会从方法签名中看到界面是什么。