Closure 代表匿名函数的类

Closure 用于获取并使用匿名函数、将匿名函数绑定到具体的类,从而实现对匿名函数的更多控制。
举个例子:

#不绑定,直接使用匿名函数

$f = function ($var){
    return $var;
};

function getClosure(Closure $f,$var){
    return $f($var);
}

echo getClosure($f,'closure');
#将匿名函数绑定到类再使用

class dog{
    public $food = 'Bone';
}

$eat = function (){
  echo 'eat '.$this->food.PHP_EOL;
};

$eat_food = Closure::bind($eat,new dog());
$eat_food();

CLosure的绑定有两种方式:

    /*
    *@param Closure $closure 用来绑定的匿名函数.
    *@param object $newthis 设置匿名函数应该绑定到的对象, NULL表示不绑定到
    *@param mixed $newscope 设置匿名函数的类作用域,默认值是 'static', 表示不改变
    */
    public static Closure bind (Closure $closure , object $newthis [, mixed $newscope = 'static' ])

    /*
    *@param object $newthis 设置匿名函数应该绑定到的对象, NULL表示不绑定到
    *@param mixed $newscope 设置匿名函数的类作用域,默认值是 'static', 表示不改变
    */
    public Closure bindTo (object $newthis [, mixed $newscope = 'static' ])

举例说明具体用法:

class cat{
    public $food='fish';
}

class dog{
    private $food = 'Bone';
}

class pig{
    private static $food = 'Rice';
}

class monkey{
    private static $food = 'Banana';
}

$eat = function (){
  echo 'eat '.$this->food.PHP_EOL;
};

$eat_ = static function (){
  echo 'eat '.self::$food.PHP_EOL;
};

$eat_food = Closure::bind($eat_,null,new pig());
$eat_food();//eat Rice 
$eat_food = Closure::bind($eat,new cat());
$eat_food();//eat fish 
$eat_food = Closure::bind($eat,new dog(),'dog');
$eat_food();//eat Bone 
$eat_food = $eat_->bindTo(null,'monkey');
$eat_food();//eat Banana
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲敲代码、落灯花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值