PHP 5.4 Unterklassen und Strict Warnings

03/11/2012 - 10:15 von Gregor Kofler | Report spam
Folgende Konstruktion

abstract class AbstractA {
public function foo(AbstractB $b) {
...
}
}

abstract class AbstractB {
}

class A extends AbstractA {
public function foo(B $b) {
...
}
}

class B extends AbstractB {
}

$myA = new A();
$myB = new B();

$myA->foo($myB);


liefert ab PHP 5.4

Strict Standards: Declaration of A::foo() should be compatible with
AbstractA::foo(AbstractB $option) in ...

Umgehe ich das nur damit, dass ich in AbstractA::foo() kein Argument
fordere (was mM nicht sinnvoll ist, da andere Unterklassen von AbstractA
keine eigene Methode foo() mitbringen)?

Gregor
 

Lesen sie die antworten

#1 Ulf K.adner
03/11/2012 - 10:56 | Warnen spam
On 03.11.2012 10:15, Gregor Kofler wrote:
Folgende Konstruktion

abstract class AbstractA {
public function foo(AbstractB $b) {
...
}
}

abstract class AbstractB {
}

class A extends AbstractA {
public function foo(B $b) {
...
}
}

class B extends AbstractB {
}

$myA = new A();
$myB = new B();

$myA->foo($myB);


liefert ab PHP 5.4

Strict Standards: Declaration of A::foo() should be compatible with
AbstractA::foo(AbstractB $option) in ...



Das ist logisch. Wenn Du einen typisierten Parameter nutzt kannst Du
dessen Eigenschaften in einer Ableitung nicht plötzlich àndern. Das
würde dem Prinzip der Vererbung wiedersprechen.

Umgehe ich das nur damit, dass ich in AbstractA::foo() kein Argument
fordere (was mM nicht sinnvoll ist, da andere Unterklassen von AbstractA
keine eigene Methode foo() mitbringen)?



Du könntest einfach auf einen untypisierten Parameter wechseln und z.B.
erst in der Klasse prüfen ob der Type des Parameters der Notwendigkeit
entspricht.

Gruß, Ulf

Ähnliche fragen