PHP - self, static или $ this в функции обратного вызова - PullRequest
14 голосов
/ 25 февраля 2012

Можно ли получить доступ к классам / объектам, обозначенным как self, static и $this в анонимных обратных вызовах в PHP? Просто так:

class Foo {
    const BAZ = 5;
    public static function bar() {
         echo self::BAZ; // it works OK
         array_filter(array(1,3,5), function($number) /* use(self) */ {
             return $number !== self::BAZ; // I cannot access self from here
         });
    }
}

Есть ли способ заставить его вести себя как с обычными переменными, используя выражение use(self)?

Ответы [ 3 ]

15 голосов
/ 25 февраля 2012

С PHP5.4 это будет. Пока это невозможно. Однако, если вам нужен только доступ к публичным свойствам, метод

$that = $this;
function () use ($that) { echo $that->doSomething(); }

Для констант нет никаких оснований для не использовать квалифицированное имя

function () { echo Classname::FOO; }
4 голосов
/ 25 февраля 2012

Просто используйте стандартный способ:

Foo::BAZ;

или

$baz = self::BAZ;
... function($number) use($baz) {
   $baz;
}
1 голос
/ 13 ноября 2017

Что по этому поводу:

class Foo {
    const BAZ = 5;
    $self = __class__;
    public static function bar() {
         echo self::BAZ; // it works OK
         array_filter(array(1,3,5), function($number) use($self) {
             return $number !== $self::BAZ; // access to self, just your const must be public
         });
    }
}
...