Generic placeholder image
闲敲代码、落灯花
What's past is prologue

联系邮箱:email@hezehua.net


联系QQ:1907330840

座右铭

保持热情,持续学习,每日精进

Closure 代表匿名函数的类

Closure 代表匿名函数的类

本文与作者在csdn上的博文【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
猜你喜欢
PHPmyadmin 和 MySQL 的配置笔记
阅读 168

配置MySQL: (直接下载msi文件或者exe文件安装的可直接看第 3 步) 基础配置: 1. 将安装包解压到根目录,如E:\mysql; 2. 进入mysql文件夹找到my-default.ini文件,并将文件名改为my.ini; 3.用记...

如何安装新的PHP扩展模块
阅读 238

一、phpize方式 (该方法用于安装php源码ext目录中没有的扩展) 1、下载源码 2、解压并进入扩展目录 3、执行phpize 4、执行./configure 5、make && make install 6、在php.ini 文...

编译安装LNMP全程实录
阅读 183

此次是在CentOs 7.4上进行安装配置,先把编译环境配置好: yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++ 准备一些软件的安装包: 安装包 地址 用途 ...

php脚本定时更新商品列表
阅读 223

电商项目中为了提高抗并发能力,需要对商品列表做缓存,以下是更新缓存用的脚本: //PRODUCTION_为缓存商品列表的临时key //PRODUCTION为缓存商品列表key $con = mysqli_connect($db_config['host'],$db_config['user...

爬虫302
阅读 183

在多次爬取数据数据后,会出现302重定向的问题,解决办法是增加一个curl参数配置: CURLOPT_USERAGENT 以此设置用户代理,模拟浏览器访问。

木桶布局 原理与实现
阅读 222

项目中有一些图片布局需要按木桶布局排列,而前端工程师是个新手,不会用JS实现,只能在后端处理,直接返回处理好的图片尺寸,达到木桶布局的效果。 木桶布局就是将图片按行、等高排列,并且保证每一行图片排列正好占满,边距相等,效果如下: 实现木桶布局的图片尺寸处理主要有以下步骤: 1、设置行高、...

Laravel中的env函数获取不到确定存在的配置
阅读 217

今天重启服务器后发现网站有个报错,一看是获取配置出错,于是去检查配置,发现没问题,配置是正确的,于是想着换成getenv函数试试,还是不行,执行一遍composer install、composer update、composer dump-autoload还是无效,然后想起之前env配置不生效时...

laravel-admin 在列表页添加自定义按钮
阅读 974

为了添加自定义按钮,按官方文档分4步走: 1、先定义工具类app/Admin/Extensions/Tools/MyButton.php: <?php namespace App\Admin\Extensions\Tools; use Encore\Admin\A...