- Building RESTful Web Services with PHP 7
- Haafiz Waheed ud din Ahmad
- 154字
- 2021-07-03 00:02:23
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)
推薦閱讀
- Learning Docker
- JavaScript 網(wǎng)頁編程從入門到精通 (清華社"視頻大講堂"大系·網(wǎng)絡開發(fā)視頻大講堂)
- Python程序設計(第3版)
- 小程序,巧運營:微信小程序運營招式大全
- ArcGIS By Example
- Spring+Spring MVC+MyBatis整合開發(fā)實戰(zhàn)
- Internet of Things with ESP8266
- Java語言程序設計教程
- SciPy Recipes
- .NET 4.5 Parallel Extensions Cookbook
- Xamarin Blueprints
- 你真的會寫代碼嗎
- 企業(yè)級Java現(xiàn)代化:寫給開發(fā)者的云原生簡明指南
- 微信公眾平臺開發(fā)最佳實踐
- Mastering Assembly Programming