2012-04-11 23 views
0

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

Class A 
{ 
    public function foo() { } 
} 

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

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

私はこれが不可能だと知っていますが、私はこれを解決する必要があります。

PS:この質問のタイトルが正しいと思います。

+0

なぜ 'B'をインスタンス化できないのですか?私はあなたの実際の問題があると思う。 – Bazzz

+2

私はそれが構文上の問題ではなく設計上の問題であるという印象を持っています。 –

+0

Bをインスタンス化できない理由を詳しく教えてください。 –

答えて

-1

Bのメソッドは静的になりますか?

Class A 
{ 
    public function foo() { } 
} 

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

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

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

あなたの構造が少しずれている可能性があります。再利用可能なコードスニペットを自分のルーチンに抽象化しようとします。

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

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

これは正常に動作します:

と思い
Class A 
{ 
    public function foo() { } 
} 

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

$a = new A(); 
B::bar(); 
0

は、あなただけのextendsキーワードが親クラスを(A)を拡張しませんPHPの構文(Which can be rather confusing sometimes

を誤解し、 Aの子クラスである新しいクラスBを作成します。 BAのメソッドを継承しますが、A自体は変更されません。

関連する問題