当我尝试使用此代码时,我遇到了错误。
我的代码:
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
运算符调用了函数。
任何人都可以指导我克服这一点。
答案 0 :(得分:2)
.inc文件函数可以视为文件的自身功能,但不能作为类的自身功能。
删除$ this,代码应该有效。
答案 1 :(得分:2)
你对$this
有误解。 $this
是对调用对象的引用。因此,除非有一个类扩展了您的类 - AccessingNodes
并且方法getNodeIdByParentId
并且您的方法getNodeId
是从包含脚本中提到的类的实例调用的,否则您将无法叫它。 (注意:这是一个糟糕的设计,因为父类不应该知道关于子类的任何内容)
所以看看那个文件里面有什么。
如果只定义了功能,请像功能一样使用它。 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;
}
}
如果它是某个类的静态方法:
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;
}
}
如果有一个方法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;
}
}
P.S。有关详细信息,请阅读manual并查看OOP concepts