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

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)
主站蜘蛛池模板: 绥宁县| 莱阳市| 慈利县| 永年县| 大同市| 凤翔县| 札达县| 观塘区| 柏乡县| 比如县| 九寨沟县| 喜德县| 昌乐县| 新巴尔虎左旗| 惠安县| 宿州市| 南陵县| 象山县| 长阳| 尼木县| 渝中区| 莱西市| 汉阴县| 台山市| 凤城市| 玛纳斯县| 霍林郭勒市| 个旧市| 荥阳市| 龙川县| 清苑县| 英德市| 镇远县| 乌什县| 阳曲县| 衢州市| 汝南县| 陆河县| 当雄县| 香格里拉县| 嘉荫县|