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
- Js closure and bindJS
- Http Module 的詳細介紹HTTP
- asmcmd工具的詳細介紹ASM
- Mysqldump工具的詳細介紹MySql
- Apache (http server)的詳細介紹ApacheHTTPServer
- javascript this詳細介紹JavaScript
- JDBC 詳細介紹JDBC
- Kafka詳細介紹Kafka
- Git詳細介紹Git
- 十款最出色的PHP安全開發庫中文詳細介紹PHP
- BN(Batch Normalization)層的詳細介紹BATORM
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- 超級詳細的tcpdump用法介紹TCP
- Apache的rewrite規則詳細介紹Apache
- Go Channel 詳細介紹Go
- Nacos 介面詳細介紹
- MQ詳細命令介紹MQ
- Recovery命令詳細介紹
- Vmstat 命令詳細介紹
- Windows7下IIS+php配置教程詳細介紹WindowsPHP
- AES 加密演算法的詳細介紹加密演算法
- Cypress系列(2)- Cypress 框架的詳細介紹框架
- spring @component 的作用詳細介紹Spring
- 超詳細的介紹Python語句Python
- Android中Context的詳細介紹AndroidContext
- Linux Grep命令使用的詳細介紹Linux
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- python字典詳細介紹Python
- Spring bean詳細介紹SpringBean
- Java異常詳細介紹Java
- 【SCN】Oracle SCN 詳細介紹Oracle
- SOLIDWORKS API詳細介紹SolidAPI
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- mysql binlog詳細介紹MySql
- java泛型詳細介紹Java泛型
- 【工具】Sublime使用詳細介紹