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
猜你喜欢
laravel-admin 在指定的相册下添加照片
阅读 638

相册与照片是一对多的关系,有以下需求: 1、点开一条相册数据看到相册的照片列表 2、为相册添加照片时,表单中要看到相册的基本信息 以下是实现步骤: 第一步:构建带参数路由: $router->resource('manage/{albumid}/photo',Man...

laravel 使用事件系统统计浏览量
阅读 573

最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数。 1、在 app\Prov...

PHPmyadmin 和 MySQL 的配置笔记
阅读 324

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

爬虫302
阅读 307

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

C与PHP的联系与区别
阅读 383

联系: 1、PHP是C语言实现的一个应用软件,PHP的程序执行,最终也是调用C函数,很多时候,一些要优化性能的工作可以通过对PHP进行C扩展来实现。 区别: 0、PHP是面向对象语言,C是面向过程的函数过程式语言。 1、PHP是弱类型语言,使用变量时不需要申明类型,而且各种类型之间容易进行...

Laravel Eloquent关联模型查询设置查询条件与指定字段
阅读 1239

1、直接获取关联模型: $user->posts()->where('created_at‘,'>',date('Y-m-d H:i:s',time()))-...

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

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

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

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