0
  class hydra {
    var $dbcon;

    function __construct($ezSQL){
        $this -> dbcon=$ezSQL;
    }

  }
  class user extends hydra{
    function foo(){
       echo "bar is: ".$this->dbcon;
    }
  }

I then call:

$hydra      = new hydra($ezSQL);

However, at this point I get the following error:

Fatal error: Cannot instantiate abstract class hydra

How do set up a class that will inherit all of it's children's functions so I can do something like this:

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

output:

bar is: foobar

4

2 に答える 2

1

子の機能を親に組み込むことはできません。考えてみてください、お母さんは娘から彼女の顔を見せますか?いいえ。親から継承する子です。

指定したコードはエラーをスローしません。しかし、エラーから、hydraは抽象クラスのようです。そして、childrensメソッドをhydraと呼びたいので、そのメソッドをabstractとして持つ必要があります。

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と見なさ$hhydraます。

于 2013-01-13T03:12:37.143 に答える
0

私はあなたが遺伝の考えを間違っていると思います。親は子から関数を継承しません。CHILDは親から関数を継承します。あなたの場合、hydra関数はありませんfoo()。このクラスuserはコンストラクター関数とのプロパティを継承するhydraため、以下のコードが機能します。

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

繰り返しになりますが、子のすべての関数を継承するクラスを設定することはできません。それはオブジェクト指向プログラミングが機能する方法ではありません。

于 2013-01-13T03:12:23.243 に答える