如何在 php 中使用 $this in closure

2022-08-30 18:12:40

我有这样的功能:

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;
        });
    }
}

但这不起作用,因为你不能在里面使用,是否可以在回调中执行作为类服务成员的函数?或者我需要使用 for 或 foreach 循环?$thisuse


答案 1

$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


答案 2

你可以把它投射到别的东西:

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

您还需要通过,否则它将始终是正确的。$username


推荐