0
  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

4

2 回答 2

1

您无法将孩子的功能放入 parent。试想,妈妈是不是从女儿那里得到了她的长相?不,它是从父母那里继承的孩子。

您提供的代码不会引发任何错误。但是从错误看来 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实例。

于 2013-01-13T03:12:37.143 回答
0

我认为你对继承的想法是错误的。父母不从孩子那里继承功能,孩子从父母那里继承功能。在您的情况下,hydra没有功能foo()。该类user继承了构造函数和 的属性hydra,因此下面的代码是可行的。

$hydraChild = new user("foobar");
$hydraChild -> foo();

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

于 2013-01-13T03:12:23.243 回答