php閉包bindTo方法用法


  從手冊知道,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(1);
$cl = $ob1->getClosure();
echo $cl(),"<br/>";


$ob2 = new A(2);
$cl = $cl->bindTo($ob2); //閉包指定作用域在$ob2對象上。
echo $cl()."<br/>"; //2

  示例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個模板

 1 <?php
 2 //tpl1
 3 
 4 echo '======================<br/>';
 5 echo $this->title."<br/>";
 6 echo '武漢江漢區<br/>';
 7 echo '===========================';
 8 
 9 ?>
10 
11 <?php
12 //tpl2
13 
14 echo '===========================<br/>';
15 echo $this->title."<br/>";
16 echo '屯口經濟開發區<br/>';
17 echo '===========================';
18 
19 ?>

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM