Php 如何从父类访问子函数
然后我打电话:Php 如何从父类访问子函数,php,oop,abstract-class,Php,Oop,Abstract Class,然后我打电话: class hydra { var $dbcon; function __construct($ezSQL){ $this -> dbcon=$ezSQL; } } class user extends hydra{ function foo(){ echo "bar is: ".$this->dbcon; } } 但是,在这一点上,我得到了以下错误: $hydra
class hydra {
var $dbcon;
function __construct($ezSQL){
$this -> dbcon=$ezSQL;
}
}
class user extends hydra{
function foo(){
echo "bar is: ".$this->dbcon;
}
}
但是,在这一点上,我得到了以下错误:
$hydra = new hydra($ezSQL);
如何设置一个将继承其所有子函数的类,以便执行以下操作:
Fatal error: Cannot instantiate abstract class hydra
输出:
酒吧名称:foobar
我认为你对继承的想法是错误的。 父级不从子级继承函数,子级从父级继承函数。 在您的情况下,
hydra
没有函数foo()
。
类user
继承了构造函数和hydra
的属性,因此下面的代码将起作用
$hydra = new hydra("foobar");
$hydra -> foo();
同样,您不能设置继承其所有子函数的类。
这不是面向对象编程的工作方式。您无法将子功能放入父功能中。想想看,妈妈是不是从她女儿那里得到了她的表情?不是。是从父代继承的子代 您给出的代码不会抛出任何错误。但从错误来看,hydra似乎是一个抽象类。当您想将childrens方法称为hydra时,您应该将该方法称为abstract
$hydraChild = new user("foobar");
$hydraChild -> foo();
现在可以实例化user
,但调用foo()
方法作为hydra
。它的帮助完全是类型暗示
abstract class hydra {
var $dbcon;
function __construct($ezSQL){
$this -> dbcon=$ezSQL;
}
abstract public function foo();
}
这里的函数
dofoo
将$h
视为hydra
实例 你把它完全倒过来了。子类可以访问父类的函数,而不是相反。抽象类不能被实例化,这就是为什么它们被称为抽象类。父母不在孩子之后继承,反之亦然。所以没有办法有一个“容器”类,你可以继续添加扩展吗?创建X个相互扩展的子对象,然后创建一个包含所有子对象的容器来扩展自身,这似乎适得其反。抽象类不必有抽象方法。@danronmoon你知道吗?这就是我一直在寻找的。我只是不明白为什么要初始化两个类,而实际上只需要Hydra的构造和它的一个子函数。只有在父类中声明函数是抽象公共函数时,才能将foo()调用为hydra,对吗?当您将其调用为hydra
时,必须声明该类。我的想法完全错误,谢谢。它最终成功了。就个人感觉而言,这对我来说没有任何意义。我想我应该继续读下去,试着更好地理解父母与孩子的关系。谢谢你!
function dofoo(hydra $h){
$h->foo();
}
$user = new user("bar");
dofoo($user);