php中 Closure::bind
Closure::bind -------复制一个闭包,绑定指定的$this对象和类作用域
public static Closure::bind(Closure $closure ,object $newthis,mixed $newscope = 'static') :Closure
参数
closure :需要绑定的匿名函数
newthis: 需要绑定到匿名函数的对象,或者null创建未绑定的闭包
newscope 想要绑定给闭包的类作用域,或者'static' 表示不改变。如果传入一个对象,则使用这个对象的类型名。类作用域用来决定在闭包中$this对象的私有,保护方法的可见性
返回值
返回一个新的Closure对象 或者在失败时返回false
<?php class Person{ public $name = "张三"; private $school = "北大"; public static $age = "18cm"; protected $gf = "凤姐"; } $name = function (){ return $this->name; }; $name1 = Closure::bind($name,new Person,null); echo $name1(); echo "
"; $school = function (){ return $this->school; }; $school1 = Closure::bind($school,new Person(),'Person'); echo $school1(); echo "
"; $age = static function (){ return Person::$age; }; $age1 = Closure::bind($age, null,null); echo $age1(); echo "
"; $gf = function(){ return $this->gf; }; $gf1 = Closure::bind($gf,new Person(),'Person'); echo $gf1();
总结
一般在匿名函数中有$this->name 类似这样用$this访问属性时,在使用bind绑定时候,第二个参数肯定要写,写出你绑定那个对象实例,第三个参数取决于你要访问的这个属性的可见性。如果是private,protected,则必须要写。如果本来就是公有的,则可以省略不写。
一般匿名函数中是 类目::静态属性,类似这样的访问方式,第二个参数可以写null,也可以写具体的对象实例,第三个参数和上面一样,如果这个静态属性的可见性是private或者protected,第三个参数必须要写,如果是public则可以省略不写。
参考链接
https://blog.csdn.net/qq_27718961/article/details/91043221
https://www.php.net/manual/zh/closure.bind.php