-1

当我尝试使用此代码时,我遇到了一个错误。

我的代码:

require_once 'functions/general.functions.inc';

class AccessingNodes {

    function getNodeId($parent_id){
        $node_id = $this->getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
        return $node_id;
    } 

}

我无法访问该包含文件的功能。它给了我一个错误。

错误 :

对未定义方法 AccessingNodes::getNodeIdByParentId 的致命错误调用

general.functions.inc 是由某个人定义的。我不知道这里缺少什么。我得到了我之前在 SO 中的帖子的答案。在那里,据说我们可以将 .inc 文件的函数视为文件自己的函数。所以我使用$this运算符调用了该函数。

任何人都请指导我克服这个问题。

4

2 回答 2

2

.inc 文件函数可以被视为文件自己的函数,但不能被视为类自己的函数。

删除 $this 并且代码应该可以工作。

于 2013-02-01T08:28:56.577 回答
2

你对$this. $this是对调用对象的引用。因此,除非有一个类可以扩展您的类 -AccessingNodes并且具有方法getNodeIdByParentId并且您的方法getNodeId是从包含脚本中提到的类的实例调用的,否则您将无法调用它。(注意:这是一个糟糕的设计,因为父类不应该知道任何关于子类的事情)

所以看看那个文件里面有什么。

  1. 如果只定义了函数,请像函数一样使用它。例如

    function getParentIdByParentId($id) { }
    
    class AccessingNodes {
    
         function getNodeId($parent_id){
              $node_id = getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
              return $node_id;
         } 
     }
    
  2. 如果它是某个类的静态方法:

     class MyClass {
        public static function getNodeIdByParentId($id) {}
     }
    
     class AccessingNodes {
    
        function getNodeId($parent_id){
            $node_id = MyClass::getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
            return $node_id;
        } 
    }
    
  3. 如果有一个类有方法getNodeIdByParentId创建它的实例并调用该方法:

    class MyClass {
        public function getNodeIdByParentId($id) {}
    }
    
    class AccessingNodes {
    
        function getNodeId($parent_id){
            $obj = new MyClass;
            $node_id = $obj->getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
            return $node_id;
        } 
    }
    

ps 有关更多信息,请阅读手册并查看OOP 概念

于 2013-02-01T08:31:56.950 回答