如何在 php 的闭包中使用 $this

Posted

技术标签:

【中文标题】如何在 php 的闭包中使用 $this【英文标题】:How to use $this in closure in php 【发布时间】:2017-11-12 21:51:05 【问题描述】:

我有这样的功能:

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

但这不起作用,因为您不能在use 中使用$this,是否可以在回调中执行属于Service 类成员的函数?还是我需要使用 for 或 foreach 循环?

【问题讨论】:

【参考方案1】:

$thisphp 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 manual - Anonymous functions - Automatic binding of $this

【讨论】:

【参考方案2】:

你可以把它转换成别的东西:

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

您还需要通过 $username 否则它总是正确的。

【讨论】:

分配不转换

以上是关于如何在 php 的闭包中使用 $this的主要内容,如果未能解决你的问题,请参考以下文章

php方法中如何获取闭包的值?

Laravel 中的闭包参数是如何传入的

将闭包定义为类中的方法

php闭包使用例子

php闭包使用例子

使用闭包进行 PHP 单元测试