traits und strict standards

24/04/2013 - 15:12 von Stefan+Usenet | Report spam
Der Versuch, in einer Klasse mit Traits eine durch den Trait zur
Verfuegung gestellte Methode zu erweitern:

<?php

trait Foo {
public function baz() {
echo "Foo::baz";
}
}

class Bar {
use Foo;

public function baz() {
echo "Bar::baz";
Foo::baz();
}
}

$o = new Bar();
$o->baz();

?>

Es passiert genau das, was passieren soll - allerdings wird gleichzeitig
"Non-static method Foo::baz() should not be called statically" reklamiert.

Je nun, woher das kommt, ist naheliegend. Allein, ich hielt die
Notation "Foo::" in diesem Zusammenhang vergleichbar mit "parent::",
wo ja auch niemand einen statischen Aufruf unterstellen wird. Ist
die Fehlermeldung falsch, oder die von mir verwendete Notation (und
wenn zweiteres, wie sollte das besser geschrieben werden)?

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan - stöhnen!? Nur spinnen ist echter.
(Sloganizer)
 

Lesen sie die antworten

#1 Jens Tautenhahn
24/04/2013 - 19:33 | Warnen spam
Am 24.04.2013 15:12, schrieb Stefan Froehlich:
Der Versuch, in einer Klasse mit Traits eine durch den Trait zur
Verfuegung gestellte Methode zu erweitern:

<?php

trait Foo {
public function baz() {
echo "Foo::baz";
}
}

class Bar {
use Foo;

public function baz() {
echo "Bar::baz";
Foo::baz();
}
}

$o = new Bar();
$o->baz();

?>

Es passiert genau das, was passieren soll - allerdings wird gleichzeitig
"Non-static method Foo::baz() should not be called statically" reklamiert.



Evtl. so:

class Bar {
use Foo {
Foo::baz as foo_baz;
}

public function baz() {
echo "Bar::baz";
foo_baz();
}
}


Gruß
Jens

Ähnliche fragen