从手册知道,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 '==========================='; ?>

  

最新文章

  1. 【转】段错误调试神器 - Core Dump详解
  2. javscript创建Emitter
  3. 为Angularjs ngOptions加上index解决方案
  4. CSS+DIV两栏式全屏布局
  5. RCP:如何移除Search对话框中不需要的项
  6. 通过Ajax——异步获取相关问题解答
  7. 4.2 EF的CRUD控制器代码
  8. MEF 编程指南(七):使用目录
  9. Newton&#39;s Method
  10. 【排障】nginx在reload时候报错invalid PID number
  11. 【转】周末班LR笔记总结—新手入门必备
  12. HDU 2544 最短
  13. window.open打开新页面居中
  14. 忽略node.js服务中favicon.icon的请求
  15. 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
  16. 单例模式的优化之路(java)
  17. phpstorm 如何设置识别vue文件
  18. Kafka权威指南 读书笔记之(五)深入Kafka
  19. P3829 [SHOI2012]信用卡凸包
  20. Android开发教程之【环境搭建及HelloWorld】(转载)

热门文章

  1. Java判断String类型变量是否可以转换数字类型
  2. 利用按钮来控制不同activity页面的移动
  3. 新手,Visual Studio 2013 配置Boost库,如何编译和选择
  4. JFrog Artifactory CE c&amp;&amp;c++ 包管理工具
  5. FastAdmin Bootstrap-table 特定某行背景变红
  6. 移植wpa_supplicant2.5及界面配置wifi(原创)
  7. PhoneGap 获得APP的VersionName
  8. 编译sass,遇到报错error style.scss (Line 3: Invalid GBK character &quot;\xE5&quot;)
  9. Train-Alypay-Cloud:mPaaS 移动开发平台培训(第一次)
  10. hdu-4432-Sum of divisors