abstract:<?php/** * 教學內(nèi)容: 什么是閉包? * 1. 提到閉包,就不得不提匿名函數(shù),php官方手冊中,將閉包與匿名函數(shù)視為等同的 * 2. 閉包的三種使用場景: 函數(shù)內(nèi)部, 函數(shù)參數(shù), 函數(shù)返回值 *//** * 老師,昨晚講的回調(diào),覺得匿名函數(shù)真的很強大,有人說,匿名函數(shù)主要用在閉包中,那么閉包又是什么呢? * 閉包并不是ph
<?php
/**
* 教學內(nèi)容: 什么是閉包?
* 1. 提到閉包,就不得不提匿名函數(shù),php官方手冊中,將閉包與匿名函數(shù)視為等同的
* 2. 閉包的三種使用場景: 函數(shù)內(nèi)部, 函數(shù)參數(shù), 函數(shù)返回值
*/
/**
* 老師,昨晚講的回調(diào),覺得匿名函數(shù)真的很強大,有人說,匿名函數(shù)主要用在閉包中,那么閉包又是什么呢?
* 閉包并不是php的專利,很多編程語言都有的,例如,javascript,當然,php中的閉包,還是很有特色的
*/
/**
* @param $name
* @return string
*/
$demo1 = function ($name) {
return $name . '最愛的人是: 趙敏';
};
//調(diào)用匿名函數(shù)
echo $demo1('張無忌'), '<hr>';
//匿名函數(shù)也有自己的作用域,如果要在函數(shù)作用域中使用外部變量,除了傳參,還可以這樣
$belle = '周芷若';
//$demo2 = function ($name) {
$demo2 = function ($name) use ($belle) {
// return $name . '最愛的人是趙敏';
return $name . '最愛的人是: ' . $belle;
};
//調(diào)用匿名函數(shù)
echo $demo2('張無忌'), '<hr>';
//匿名函數(shù)可以使用use 關鍵字,訪問參數(shù)列表之外的數(shù)據(jù),而且這個數(shù)組可以來自匿名函數(shù)的外部,這個可太有意思了
//它可以實現(xiàn)非常多的實用功能,極大的增強了函數(shù)的功能
//現(xiàn)在,咱們來詳細說說閉包的問題,理解了匿名函數(shù),以及匿名函數(shù)中的use關鍵字的使用,閉包就非常簡單了
//首先,我們先給閉包下一個簡單的定義: 將匿名函數(shù)當作一個普通變量,在另一個函數(shù)中調(diào)用它,就會形成一個閉包,這時,匿名函數(shù)的功能,
//就是生成一個閉包,所以,現(xiàn)在把匿名函數(shù),直接稱為: 閉包函數(shù), 也是沒問題的。
//變量在函數(shù)中有三個作用:1. 當作局部變量 2.當作參數(shù),其實還是局部變量 3. 當作返回值,基本質(zhì)還是一個局部變量
//所以閉包也有三種使用場景:
//1.閉包函數(shù)當作局部變量使用
$func1 = function () {
$name = '無忌哥哥';
//定義一個內(nèi)部的匿名函數(shù)
$test = function () use ($name) {
return $name . ',我另一個函數(shù)包住了,快來救我';
};
//調(diào)用,必須要調(diào)用一次,才能形成閉包
return $test();
};
echo $func1(), '<hr>';
//2.閉包函數(shù)當作函數(shù)參數(shù)使用
$name = '無忌哥哥';
$test = function () use ($name) {
return $name . ',我又被當作參數(shù)啦,你還要我嗎?';
};
$func2 = function (callable $callback) {
//執(zhí)行匿名回調(diào)并返回
return $callback();
};
//用匿名函數(shù)做為參數(shù)調(diào)用
echo $func2($test), '<hr>';
//3.閉包函數(shù)當用函數(shù)返回值使用
$func3 = function () {
$name = '無忌哥哥';
$test = function () use ($name) {
return $name . ',我又被當作參數(shù)啦,真倒霉~~';
};
return $test;
};
//你可能見到最多的是這種簡寫形式
$func3 = function () {
$name = '無忌哥哥';
return function () use ($name) {
return $name . ',我又被當作返回值,掃地出門啦,你還要我嗎?';
};
};
// $func3() 的返回值是一個函數(shù),所以再加一對圓括號,才可以執(zhí)行
echo $func3()();
/**
* 現(xiàn)在明白了,原來閉包可以當作一個普通函數(shù)使用,也可以當作函數(shù)參數(shù)使用,甚至可以當作函數(shù)的返回值
* 是的,閉包還有二個生效條件:第一,必須是定義一個匿名函數(shù), 第二,必須要執(zhí)行一次來生成閉包函數(shù)
*/
//以上就是最經(jīng)典的三種閉包使用場景,大家記住二點即可:
//第一,必須是定義一個匿名函數(shù), 第二,必須要執(zhí)行一次來生成閉包函數(shù)
Correcting teacher:天蓬老師Correction time:2019-08-15 10:46:13
Teacher's summary:<?php
/**
* 教學內(nèi)容: 什么是閉包?
* 1. 提到閉包,就不得不提匿名函數(shù),php官方手冊中,將閉包與匿名函數(shù)視為等同的
* 2. 閉包的三種使用場景: 函數(shù)內(nèi)部, 函數(shù)參數(shù), 函數(shù)返回值
*/
/**
* 老師,昨晚講的回調(diào),覺得匿名函數(shù)真的很強大,有人說,匿名函數(shù)主要用在閉包中,那么閉包又是什么呢?
* 閉包并不是php的專利,很多編程語言都