Komunikat ten (unexpected T_PAAMAYIM_NEKUDOTAYIM) otrzymujemy, gdy używamy :: w kontekście, którego PHP nie obsługuje (out of scope), czyli np. odwołujemy się do zwykłych metod, a nie do metod statycznych. Co ciekawe błąd ten wyskakuje w PHP < 5.3 również gdy wywołujemy istniejącą metodę statyczną przy użyciu zmiennych:
$className::$methodName();Problem ten oczywiście nie istnieje w PHP >= 5.3, jednak przy starszych wersjach wciąż można natknąć się na tego dziwoląga :)
Alternatywą dla tego rozwiązania jest użycie funkcji call_user_func(), ta jednak działa wolniej od takiego bezpośredniego wywołania:
call_user_func($class."::".$method);Dla porównania sprawdziłem również czas wykonywania zwykłych (niestatycznych) metod:
class::method 0.0067858696 call_user_func 0.0170218945 call_user_func (array) 0.0149610043 class->method 0.0044798851 call_user_func (array non-static) 0.0125558376Kod z testu do pobrania z chomika (link).
Brak komentarzy:
Prześlij komentarz