Weź contrived przykład, w którym chcę wezwać protected static
metodę z innym kontekście przez funkcję zwrotną:Używanie "ja" w anonimowym oddzwonieniu?
class Foo {
protected static function toBeCalled() { }
public static function bar() {
functionThatAcceptsACallback(function() {
self::toBeCalled();
});
}
}
Jest to możliwe w PHP 5.3? Nie mogłem znaleźć sposobu, aby to zadziałało ...
Czy próbowałeś przekazać go jak każdą inną zmienną zewnętrzną z 'use'? 'function() use (& self) {...}' może być konieczne powiązanie go z inną zmienną zamiast używania słowa kluczowego. – Orbling
@Orbling To jest problem, to słowo kluczowe *, a nie zmienna. Jeśli jest używana w innej formie niż 'self :: methodName', jest rozpoznawana jako stała. (Idź PHP! (ー _ ー ;;)) – deceze
Rozumiem, że anonimowe funkcje mają swój własny zakres i nie mają dostępu do niczego na zewnątrz, z wyjątkiem użycia. Jednak w [dokumentacji] (http://php.net/manual/en/functions.anonymous.php), mówi, że od wersji 5.4.0 + '$ this' działa teraz w zamknięciu, więc może' self' robi także w tej wersji. – Orbling