0

A という名前のクラスがあります。A を拡張する B という名前の別のクラスがあります。B ではなく A をインスタンス化する必要がありますが、B のメソッドも使用する必要があります。これどうやってするの?

Class A
{
    public function foo() { }
}

Class B extends A
{
    public function bar() { }
}

$a = new A();
$a->bar();

これが不可能であることはわかっていますが、これに対する解決策が必要です。

PS: この質問のタイトルが正しいことを願っています。

4

3 に答える 3

1
$a = new A();
$a->bar();

致命的なエラーが発生します。bar()class のメソッドではないためですAAしたがって、クラスのオブジェクトを使用してこれを呼び出すことはできません。

これはうまくいきます:

Class A
{
   public function foo() { }
}

Class B extends A
{
   public static function bar() {  }
}

$a = new A();
B::bar();
于 2012-04-11T11:17:16.117 に答える
0

PHPの構文を誤解しているだけだと思います(これは時々かなり混乱する可能性があります

キーワードは親クラス ( ) を拡張extendsしませんが、の子である新しいクラスを作成します。のメソッドを継承していますが、それ自体は変更されていません。ABABAA

于 2012-04-11T13:19:53.663 に答える
-1

B のメソッドは静的にできますか?

Class A
{
    public function foo() { }
}

Class B extends A
{
    public static function bar2() { }
}

$a = new A();
$a->bar();
B::bar2();

B::bar() は A::bar() 実装をオーバーライドしているため、明らかに別の名前を付けるのが理にかなっています。

構造が少しずれている可能性があると思います。再利用可能なコード スニペットとして必要なものを独自のルーチンに抽象化してみてください。

于 2012-04-11T10:51:07.177 に答える