php-----匿名函数类Closure类的使用
背景:
上次看了下composer源码,发现了一处使用匿名函数的地方,由于对匿名函数使用的比较少,所以当时还是还有点不懂,今天练习了下匿名函数的使用方法,composer中的代码如下:
public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInitf9a4edff7ca5d83a52a9242e688ac24a::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInitf9a4edff7ca5d83a52a9242e688ac24a::$prefixDirsPsr4; }, null, ClassLoader::class); }
上述返回了一个匿名函数,匿名函数通过用use关键字引入加载器,目的是让loader加载器的相关映射配置信息初始化,当时没搞懂bind()函数的最后一个参数是用来干啥的,今天试了一下,大概是如下代码如下。
<?php class person { public static $age = 26; public $name ='哈哈'; private $zhiye = '代码狗'; public function getDesc() { return '姓名:'.$this->name.'; 年龄:'.self::$age.'; 职业:'.$this->zhiye; } protected function getZhiYe() { return $this->zhiye; } private function getName() { return $this->name; } } //需要绑定到匿名函数的对象,此处就是将匿名函数中的$this变量赋值为person类的实例 $fn = \Closure::bind(function(){ echo $this->name; },new person()); call_user_func($fn);//将匿名函数当做回调函数调用 //如果匿名函数中需要访问类的静态变量或者类的受保护、私有的静态属性或者方法,则必须将第三个参数设置为类的名称 $fn = \Closure::bind(function(){ echo self::$age; },null,'person'); call_user_func($fn); $fn = \Closure::bind(function(){ echo $this->zhiye; },new person(),'person'); call_user_func($fn); $fn = \Closure::bind(function(){ echo $this->getName(); },new person(),'person'); call_user_func($fn);

浙公网安备 33010602011771号