Temat: Jeszcze jeden powód, z którego PHP sucks
Tak z ciekawości - czemu to powinna być metoda statyczna, a nie np. singleton lub zainstancjonowanie obiektu i wywołanie metody?
Paradoksalnie z punktu widzenia performance często lepiej działa metoda wywoływana na zainstancjonowanym obiekcie niż metoda statyczna w PHP. No chyba, że obiekt ma masę pól, masywny konstruktor itp.
PHP nie przewidział przeciążania i przesłaniania pól statycznych. Co zresztą byłoby niezbyt zgodne z OOP. Do wersji 5.3 nie przewidział też sprawdzania nazwy klasy z poziomu statycznego. W sumie można by było zrobić to okrężną drogą - wywołać wyjątek, przechwycić go i na bazie stack trace sprawdzić nazwę. Niezły overkill moim zdaniem. Zresztą tak działa chyba jeden z przykładów na necie.
Ciekawe na co wskazuje __FILE__ podczas wywoływania takiej metody. Ale stawiałbym, że na plik parenta. To byłoby logiczne.
W Java zresztą też nie jest to takie łatwe. Zdarzyło mi się kiedyś w przypływie rozpaczy to tak zrobić, że dodałem statyczną metodę w której zrzucałem i łapałem wyjątek z którego wyciągałem class name. ;)
Nie pamiętam już niestety czemu mi to było do szczęścia potrzebne.
W Java można też użyć: System.getSecurityManager().getClassContext()[0].getName();
Może są też inne sposoby. To tak rzadko jest potrzebne, że nigdy nie zagłębiałem się bardzo w ten temat.
Zbigniew Matuszewski edytował(a) ten post dnia 09.07.10 o godzinie 02:00