PHP 的Closure的bind 詳細介紹
原文:https://www.cnblogs.com/eleven24/p/7487923.html
1、只繫結$this物件.
2、只繫結類作用域.
3、同時繫結$this物件和類作用域.(文件的說法)
4、都不繫結.(這樣一來只是純粹的複製, 文件說法是使用cloning代替bind或bindTo)
第一種 只繫結$this物件
$closure
=
function
(
$name
,
$age
) {
$this
->name =
$name
;
$this
->age =
$age
;
};
class
Person {
public
$name
;
public
$age
;
public
function
say() {
echo
"My name is {$this->name}, I'm {$this->age} years old.\n"
;
}
}
$person
=
new
Person();
//把$closure中的$this繫結為$person
//這樣在$bound_closure中設定name和age的時候實際上是設定$person的name和age
//也就是繫結了指定的$this物件($person)
$bound_closure
= Closure::bind(
$closure
,
$person
);
$bound_closure
(
'php'
, 100);
$person
->say();
第二種 只繫結類作用域.
$closure
=
function
(
$name
,
$age
) {
static
::
$name
=
$name
;
static
::
$age
=
$age
;
};
class
Person {
static
$name
;
static
$age
;
public
static
function
say()
{
echo
"My name is "
.
static
::
$name
.
", I'm "
.
static
::
$age
.
" years old.\n"
;
}
}
//把$closure中的static繫結為Person類
//這樣在$bound_closure中設定name和age的時候實際上是設定Person的name和age
//也就是繫結了指定的static(Person)
$bound_closure
= Closure::bind(
$closure
, null, Person::
class
);
$bound_closure
(
'php'
, 100);
Person::say();
第三種 同時繫結$this物件和類作用域.(文件的說法)
$closure
=
function
(
$name
,
$age
,
$sex
) {
$this
->name =
$name
;
$this
->age =
$age
;
static
::
$sex
=
$sex
;
};
class
Person {
public
$name
;
public
$age
;
static
$sex
;
public
function
say()
{
echo
"My name is {$this->name}, I'm {$this->age} years old.\n"
;
echo
"Sex: "
.
static
::
$sex
.
".\n"
;
}
}
$person
=
new
Person();
//把$closure中的static繫結為Person類, $this繫結為$person物件
$bound_closure
= Closure::bind(
$closure
,
$person
, Person::
class
);
$bound_closure
(
'php'
, 100,
'female'
);
$person
->say();
4、都不繫結.(這樣一來只是純粹的複製, 文件說法是使用cloning代替bind或bindTo)
$closure
=
function
() {
echo
"bind nothing.\n"
;
};
//與$bound_closure = clone $closure;的效果一樣
$bound_closure
= Closure::bind(
$closure
, null);
$bound_closure
();
相關文章
- 詳細介紹php和apache的關係和作用PHPApache
- 註解的詳細介紹
- Http Module 的詳細介紹HTTP
- spring @component 的作用詳細介紹Spring
- Kafka詳細介紹Kafka
- javascript this詳細介紹JavaScript
- ApplicationContext 詳細介紹APPContext
- JDBC 詳細介紹JDBC
- Ifconfig詳細介紹
- Git詳細介紹Git
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- BN(Batch Normalization)層的詳細介紹BATORM
- rqt的安裝及詳細介紹QT
- 超詳細的介紹Python語句Python
- Spring bean詳細介紹SpringBean
- python字典詳細介紹Python
- Nacos 介面詳細介紹
- SOLIDWORKS API詳細介紹SolidAPI
- Go Channel 詳細介紹Go
- call、apply、bind應用的介紹APP
- Windows7下IIS+php配置教程詳細介紹WindowsPHP
- DISCUZ原始碼分析流程詳細介紹【admin.php入口】原始碼PHP
- Python安裝PyMongo的方法詳細介紹PythonGo
- Cypress系列(2)- Cypress 框架的詳細介紹框架
- tensorboard 視覺化的最詳細介紹ORB視覺化
- AES 加密演算法的詳細介紹加密演算法
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- LVM詳細介紹及建立LVM
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- 【SCN】Oracle SCN 詳細介紹Oracle
- Java異常詳細介紹Java
- Java開源的混淆器 Proguard詳細介紹Java
- 從 RGB 到 HSV 的轉換詳細介紹
- 《蝙蝠的“自我修養”》專案詳細介紹
- useRoute 函式的詳細介紹與使用示例函式
- 網站實現HTTPS的詳細流程介紹網站HTTP
- Go中的有限狀態機FSM的詳細介紹Go