如何在php中关闭$ this

时间:2017-06-11 09:11:31

标签: php closures this anonymous-function

我的功能如下:

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循环?

2 个答案:

答案 0 :(得分:15)

自PHP 5.4起,

$this始终可用于(非静态)闭包,无需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 manual - Anonymous functions - Automatic binding of $this

答案 1 :(得分:0)

您可以将其转换为其他内容:

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

您还需要通过$username,否则它将始终为真。