无法访问类中包含的文件功能

时间:2013-02-01 08:23:20

标签: php class

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

我的代码:

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运算符调用了函数。

任何人都可以指导我克服这一点。

2 个答案:

答案 0 :(得分:2)

.inc文件函数可以视为文件的自身功能,但不能作为类的自身功能。

删除$ this,代码应该有效。

答案 1 :(得分:2)

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

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

  1. 如果只定义了功能,请像功能一样使用它。 E.g。

    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;
        } 
    }
    
  4. P.S。有关详细信息,请阅读manual并查看OOP concepts