php闭包bindTo方法用法
2024-10-21 15:40:37
从手册知道,Closure::bindTo — 复制当前闭包对象,绑定指定的$this对象和类作用域。
创建并返回一个 匿名函数, 它与当前对象的函数体相同、绑定了同样变量,但可以绑定不同的对象,也可以绑定新的类作用域。
从我个人理解,和js里面的call函数有点类似。可以改变闭包对象指定的作用域。
示例1:
<?php class A
{ function __construct($val)
{
$this->val = $val;
} function getClosure()
{
return function(){return $this->val;};
}
} $ob1 = new A();
$cl = $ob1->getClosure();
echo $cl(),"<br/>"; $ob2 = new A();
$cl = $cl->bindTo($ob2); //闭包指定作用域在$ob2对象上。
echo $cl()."<br/>"; //
示例2:
<?php
header("Content-type:text/html;charset=utf-8"); class Yifang
{
public $title = '武汉亿房网';
public $tpl = 'tpl1.php';
} class Bentian
{
public $title = '东风本田';
public $tpl = 'tpl2.php';
} class views
{
public function render($obj)
{
$name = $obj->tpl;
$closure = function() use($name){
include './tpl/'.$name;
};
$closure = $closure->bindTo($obj);
return $closure;
}
} $View = new views();
call_user_func($View->render(new Bentian()));
call_user_func($View->render(new Yifang()));
分别对应的2个模板
<?php
//tpl1 echo '======================<br/>';
echo $this->title."<br/>";
echo '武汉江汉区<br/>';
echo '==========================='; ?> <?php
//tpl2 echo '===========================<br/>';
echo $this->title."<br/>";
echo '屯口经济开发区<br/>';
echo '==========================='; ?>
最新文章
- 【转】段错误调试神器 - Core Dump详解
- javscript创建Emitter
- 为Angularjs ngOptions加上index解决方案
- CSS+DIV两栏式全屏布局
- RCP:如何移除Search对话框中不需要的项
- 通过Ajax——异步获取相关问题解答
- 4.2 EF的CRUD控制器代码
- MEF 编程指南(七):使用目录
- Newton&#39;s Method
- 【排障】nginx在reload时候报错invalid PID number
- 【转】周末班LR笔记总结—新手入门必备
- HDU 2544 最短
- window.open打开新页面居中
- 忽略node.js服务中favicon.icon的请求
- 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
- 单例模式的优化之路(java)
- phpstorm 如何设置识别vue文件
- Kafka权威指南 读书笔记之(五)深入Kafka
- P3829 [SHOI2012]信用卡凸包
- Android开发教程之【环境搭建及HelloWorld】(转载)
热门文章
- Java判断String类型变量是否可以转换数字类型
- 利用按钮来控制不同activity页面的移动
- 新手,Visual Studio 2013 配置Boost库,如何编译和选择
- JFrog Artifactory CE c&;&;c++ 包管理工具
- FastAdmin Bootstrap-table 特定某行背景变红
- 移植wpa_supplicant2.5及界面配置wifi(原创)
- PhoneGap 获得APP的VersionName
- 编译sass,遇到报错error style.scss (Line 3: Invalid GBK character ";\xE5";)
- Train-Alypay-Cloud:mPaaS 移动开发平台培训(第一次)
- hdu-4432-Sum of divisors