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
如何设置一个将继承其所有子函数的类,以便我可以这样做:
$hydra = new hydra("foobar");
$hydra -> foo();
输出:
吧是:foobar
答案 0 :(得分:1)
您无法将子级功能转换为父级。想一想,妈妈从女儿那里看她的样子吗?不。它是继承父母的孩子。
您提供的代码不会引发任何错误。但是从错误来看似乎hydra是一个抽象类。因为你想把孩子的方法称为hydra,你应该把那个方法当作抽象的。
abstract class hydra {
var $dbcon;
function __construct($ezSQL){
$this -> dbcon=$ezSQL;
}
abstract public function foo();
}
现在您可以实例化user
,但将foo()
方法称为hydra
。它的帮助完全在类型提示。
function dofoo(hydra $h){
$h->foo();
}
$user = new user("bar");
dofoo($user);
此处函数dofoo
将$h
视为hydra
个实例。
答案 1 :(得分:0)
我认为你对继承的想法是错误的。
父级不从子级继承函数,CHILD从父级继承函数。
在您的情况下,hydra
没有函数foo()
。
类user
继承了构造函数和hydra
的属性,因此下面的代码是可行的。
$hydraChild = new user("foobar");
$hydraChild -> foo();
再一次,你不能设置一个继承其所有子函数的类。 这不是面向对象编程的工作原理。