如何从父类访问子函数

时间:2013-01-13 02:55:20

标签: 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      = new hydra($ezSQL);

但是,此时我收到以下错误:

Fatal error: Cannot instantiate abstract class hydra

如何设置一个将继承其所有子函数的类,以便我可以这样做:

$hydra = new hydra("foobar");
$hydra -> foo();

输出:

  

吧是:foobar

2 个答案:

答案 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();

再一次,你不能设置一个继承其所有子函数的类。 这不是面向对象编程的工作原理。