PHP Closure类的bind()和bindTo()怎么用?
ringa_lee
ringa_lee 2017-04-11 10:42:14
[PHP讨论组]
ringa_lee
ringa_lee

ringa_lee

全部回复(2)
天蓬老师

不知道你有没有用过js中的call或者apply, 有点类似.

其实就是把闭包当成对象的成员方法或者静态成员方法.

Closure::bind($cl1, null, 'A'); //就相当于在类里面加了个静态成员方法
Closure::bind($cl2, new A(), 'A'); //相当于在类里面加了个成员方法

成员方法中使用$this访问对象, 静态成员方法直接使用类名::成员的方法.
但是因为是匿名函数, 没有函数名, 所以返回一个已经绑定$this对象和类作用域的闭包给你使用.

巴扎黑
<?php

class A
{
    private static $sfoo = 1;
    private $ifoo = 2;
    public static $ps = 3;
}

$aObj = new A();

echo "\n#1\n";
echo A::$ps;    //3
//echo A::$sfoo; //无权限
//echo $aObj->ifoo; //无权限


echo "\n#2\n";
$callable1 = Closure::bind(function () {
    return $this::$sfoo;
}, $aObj, 'A');
echo $callable1();    //1


echo "\n#3\n";
$callable2 = Closure::bind(function () {
    return $this->ifoo;
}, $aObj, 'A');
echo $callable2();      //2


echo "\n#4\n";
$callable3 = Closure::bind(function () {
    return A::$sfoo;        //phpStorm 会报红
}, null, 'A');
echo $callable3();    //1

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号