官术网_书友最值得收藏!

Closure::call()

Binding an object scope with a closure is an efficient way to use a closure with different objects. At the same time, it is also a simple way to use different closures having different behaviors for an object in different places. This is because it binds the object scope with a closure at runtime without inheritance, composition, and so on.
However, previously we didn't have the Closure::call() method; we had something like this:

<?php
// Pre PHP 7 code
class Point{
private $x = 1;
private $y = 2;
}

$getXFn = function() {return $this->x;};
$getX = $getXFn->bindTo(new Point, 'Point');//intermediate closure
echo $getX(); // will output 1

But now with Closure::call(), the same code can be written as follows:

<?php
// PHP 7+ code
class Point{
private $x = 1;
private $y = 2;
}

// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new Point); // outputs 1 as doing same thing

Both code snippets perform the same action. However, PHP7+ code is shorthand. In case you need to pass some parameter to closure functions, you can pass it after objects as follows:

<?php
// PHP 7+ closure call with parameter and binding

class Point{
private $x = 1;
private $y = 2;
}

$getX = function($margin) {return $this->x + $margin;};
echo $getX->call(new Point, 2); //outputs 3 by ($margin + $this->x)
主站蜘蛛池模板: 武冈市| 静乐县| 乌兰察布市| 阿瓦提县| 凌海市| 莒南县| 上杭县| 定南县| 东至县| 镇坪县| 辽阳市| 广平县| 崇文区| 高淳县| 始兴县| 台前县| 光山县| 佳木斯市| 高台县| 上杭县| 紫金县| 噶尔县| 阿合奇县| 琼海市| 芒康县| 荔浦县| 诏安县| 怀远县| 黔西| 综艺| 海林市| 余江县| 万盛区| 桓仁| 五常市| 聊城市| 呼伦贝尔市| 白河县| 巴楚县| 万荣县| 山阴县|