2012-04-11 18 views
0

Ich habe eine Klasse namens A. Ich habe eine andere Klasse namens B, die erweitert A. Ich muss A, und nicht B, sondern ich muss die Methoden in B auch. Wie kann ich das machen?PHP: instanziieren Sie eine Klasse und Methoden einer anderen Klasse

Ich weiß, dass dies nicht möglich ist, aber ich brauche eine Lösung dafür.

PS: Ich wünschte, der Titel dieser Frage ist richtig.

+0

Warum können Sie 'B' nicht instanziieren? Ich denke, da liegt dein wirkliches Problem. – Bazzz

+2

Ich habe den Eindruck, dass es eher ein Design-Problem als ein Syntax-Problem ist. –

+0

Vorsicht, warum Sie B nicht instanziieren können? –

Antwort

-1

Können die Methoden in B statisch werden?

Class A 
{ 
    public function foo() { } 
} 

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

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

offensichtlich würde es Sinn machen es etwas anderes zu nennen, wie B :: bar() wird das Überschreiben der A :: bar() -Implementierung.

Ich denke, Sie könnten Ihre Struktur leicht aus haben. Versuchen Sie, das, was Sie möchten, als wiederverwendbares Code-Snippet in seine eigene Routine zu übertragen.

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

Geben Sie einen schwerwiegenden Fehler. Weil bar() keine Methode der Klasse A ist. Sie können dies also nicht mit dem Objekt A der Klasse aufrufen.

Das wird gut funktionieren:

Class A 
{ 
    public function foo() { } 
} 

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

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

Ich denke, Sie falsch verstanden nur die Syntax von PHP (Which can be rather confusing sometimes)

Das extends Stichwort nicht die übergeordnete Klasse (A) erstrecken, aber erstellt eine neue Klasse B, die ein Kind von A ist. B erbt A Methoden, aber A selbst wird nicht geändert.

Verwandte Themen