PHP閉包之bind和bindTo

2022-08-16 14:33:10 字數 1091 閱讀 1035

closure類摘要如下:

closure
方法說明:

closure::__construct — 用於禁止例項化的建構函式

closure::bind — 複製乙個閉包,繫結指定的$this物件和類作用域。

closure::bindto — 複製當前閉包物件,繫結指定的$this物件和類作用域。

乙個例項
<?php

/**

* 複製乙個閉包,繫結指定的$this物件和類作用域。

* * @author 瘋狂老司機

*/class animal

/* * 獲取animal類靜態私有成員屬性

*/$cat = static function() ;

/* * 獲取animal例項私有成員屬性

*/$dog = function() ;

/* * 獲取animal例項公有成員屬性

*/$pig = function() ;

$bindcat = closure::bind($cat, null, new animal());// 給閉包繫結了animal例項的作用域,但未給閉包繫結$this物件

$binddog = closure::bind($dog, new animal(), 'animal');// 給閉包繫結了animal類的作用域,同時將animal例項物件作為$this物件繫結給閉包

$bindpig = closure::bind($pig, new animal());// 將animal例項物件作為$this物件繫結給閉包,保留閉包原有作用域

echo $bindcat(),'

';// 根據繫結規則,允許閉包通過作用域限定操作符獲取animal類靜態私有成員屬性

echo $binddog(),'

';// 根據繫結規則,允許閉包通過繫結的$this物件(animal例項物件)獲取animal例項私有成員屬性

echo $bindpig(),'

';// 根據繫結規則,允許閉包通過繫結的$this物件獲取animal例項公有成員屬性

總結:

underscore的bind和bindAll方法

bind方法和bindall方法都是用來設定函式的this值的,區別是呼叫方式不同。var xiaoming bind var func bind xiaoming,xiaoming.say func i am xiaoming bindall bindall xiaoming,say var fu...

js深入之call apply和bind模擬實現

var foo function fn fn.call foo 1注意 1 call改變了this的指向,指到foo 2 fn函式執行 即可將上面的 改變成下面這種形式 var foo foo.fn 1即將fn作為物件foo的屬性,然後進行呼叫。則可總結出模擬實現的步驟 1 將函式設定為物件的屬性,...

call apply和bind的原理

call 作用 call 方法就是使用乙個指定this值和若干個指定引數值的前提下呼叫摸個函式或方法。var foo function bar 如果不對this進行繫結執行bar 會返回undefined bar.call foo 1也就是說call 改變了this的指向,指向了foo 下面進行一下...