Strona 1 z 1

[php] wywołanie metody statycznej z metody statycznej

: pn gru 20, 2004 9:10 pm
autor: porneL
PHP5:
[php]
class Foo
{
static function A() {Foo::B();}
static function B() {echo 'Foo';}
};

class Bar extends Foo
{
static function B() {echo 'Bar';}
};

Bar::A();
[/php]

Wyświetla "Foo", a nie "Bar". Konieczność podana nazwy klasy medoty statycznej omija dziedziczenie :(

Jak z Foo::A wywołać Bar::B nie znając nazwy klasy Bar? (bo Foo może dziedziczyć kilka klas lub dziedziczenie może być wielokrotne)

Jak wewnątrz metody statycznej poznać nazwę klasy na rzecz której wywołano metodę?

Re: [php] wywołanie metody statycznej z metody statycznej

: czw gru 23, 2004 11:59 am
autor: splatch
Błąd wynika z tąd, że w klasie A masz już metodę B, i jeśli druga klasa z niej dziedziczy to zostaje ona nadpisana (B::Bar = A::Bar). Aby tego uniknąć użyj słowa kluczowego final:
final static function B() { echo 'xx'; }
Powoduje ono to, że przy dziedziczeniu metoda, przed którą znajduje się final nie zostanie nadpisana.

Re: [php] wywołanie metody statycznej z metody statycznej

: czw gru 23, 2004 12:09 pm
autor: porneL
No ja właśnie chciałbym, żeby sie zachowało odwrotnie niż z final. Żeby została nadpisana i została użyta...

Sprawdzalem w paru miejscach i okazuje się, że PHP po prostu nie obsługuje static i dziedzieczenia naraz. Najlepsze co można zrobić to znaleźć nazwę rzeczywistej klasy w debug_backtrace() i posiłkować się call_user_func().