Как использовать $ this при закрытии в переполнении стека

У меня есть такая функция:

class Service {
function delete_user($username) {
...
$sessions = $this->config->sessions;
$this->config->sessions = array_filter($sessions, function($session) use ($this){
return $this->get_username($session->token) != $username;
});
}
}

но это не работает, потому что вы не можете использовать $this внутри useМожно ли выполнить функцию, которая является членом класса Service внутри обратного вызова? Или мне нужно использовать цикл for или foreach?

7

Решение

$this всегда доступен в (нестатических) замыканиях начиная с PHP 5.4, нет необходимости use Это.

class Service {
function delete_user($username) {
...
$sessions = $this->config->sessions;
$this->config->sessions = array_filter($sessions, function($session) {
return $this->get_username($session->token) != $username;
});
}
}

Увидеть Руководство по PHP — Анонимные функции — Автоматическое связывание $ this

12

Другие решения

Вы можете просто привести его к чему-то другому:

$a = $this;
$this->config->sessions = array_filter($sessions, function($session) use ($a, $username){
return $a->get_username($session->token) != $username;
});

Вам также нужно будет пройти $username иначе это всегда будет правдой.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector