亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

玩轉(zhuǎn)匿名函數(shù)與閉包

原創(chuàng) 2019-08-09 13:10:45 347
摘要:<?php/** * 教學(xué)內(nèi)容: 什么是閉包? * 1. 提到閉包,就不得不提匿名函數(shù),php官方手冊(cè)中,將閉包與匿名函數(shù)視為等同的 * 2. 閉包的三種使用場(chǎng)景: 函數(shù)內(nèi)部, 函數(shù)參數(shù), 函數(shù)返回值 *//** * 老師,昨晚講的回調(diào),覺得匿名函數(shù)真的很強(qiáng)大,有人說(shuō),匿名函數(shù)主要用在閉包中,那么閉包又是什么呢? * 閉包并不是ph

<?php

/**

 * 教學(xué)內(nèi)容: 什么是閉包?

 * 1. 提到閉包,就不得不提匿名函數(shù),php官方手冊(cè)中,將閉包與匿名函數(shù)視為等同的

 * 2. 閉包的三種使用場(chǎng)景: 函數(shù)內(nèi)部, 函數(shù)參數(shù), 函數(shù)返回值

 */


/**

 * 老師,昨晚講的回調(diào),覺得匿名函數(shù)真的很強(qiáng)大,有人說(shuō),匿名函數(shù)主要用在閉包中,那么閉包又是什么呢?

 * 閉包并不是php的專利,很多編程語(yǔ)言都有的,例如,javascript,當(dāng)然,php中的閉包,還是很有特色的

 */



/**

 * @param $name

 * @return string

 */

$demo1 = function ($name) {

  return $name . '最愛的人是: 趙敏';

};


//調(diào)用匿名函數(shù)

echo $demo1('張無(wú)忌'), '<hr>';


//匿名函數(shù)也有自己的作用域,如果要在函數(shù)作用域中使用外部變量,除了傳參,還可以這樣


$belle = '周芷若';


//$demo2 = function ($name) {

$demo2 = function ($name) use ($belle) {

//    return $name . '最愛的人是趙敏';

    return $name . '最愛的人是: ' . $belle;

};


//調(diào)用匿名函數(shù)

echo $demo2('張無(wú)忌'), '<hr>';


//匿名函數(shù)可以使用use 關(guān)鍵字,訪問(wèn)參數(shù)列表之外的數(shù)據(jù),而且這個(gè)數(shù)組可以來(lái)自匿名函數(shù)的外部,這個(gè)可太有意思了

//它可以實(shí)現(xiàn)非常多的實(shí)用功能,極大的增強(qiáng)了函數(shù)的功能


//現(xiàn)在,咱們來(lái)詳細(xì)說(shuō)說(shuō)閉包的問(wèn)題,理解了匿名函數(shù),以及匿名函數(shù)中的use關(guān)鍵字的使用,閉包就非常簡(jiǎn)單了


//首先,我們先給閉包下一個(gè)簡(jiǎn)單的定義: 將匿名函數(shù)當(dāng)作一個(gè)普通變量,在另一個(gè)函數(shù)中調(diào)用它,就會(huì)形成一個(gè)閉包,這時(shí),匿名函數(shù)的功能,

//就是生成一個(gè)閉包,所以,現(xiàn)在把匿名函數(shù),直接稱為: 閉包函數(shù), 也是沒問(wèn)題的。


//變量在函數(shù)中有三個(gè)作用:1. 當(dāng)作局部變量  2.當(dāng)作參數(shù),其實(shí)還是局部變量  3. 當(dāng)作返回值,基本質(zhì)還是一個(gè)局部變量

//所以閉包也有三種使用場(chǎng)景:


//1.閉包函數(shù)當(dāng)作局部變量使用

$func1 = function () {

    $name = '無(wú)忌哥哥';

    //定義一個(gè)內(nèi)部的匿名函數(shù)

    $test = function () use ($name) {

        return $name . ',我另一個(gè)函數(shù)包住了,快來(lái)救我';

    };

    //調(diào)用,必須要調(diào)用一次,才能形成閉包

    return $test();

};


echo $func1(), '<hr>';


//2.閉包函數(shù)當(dāng)作函數(shù)參數(shù)使用

$name = '無(wú)忌哥哥';


$test = function () use ($name) {

    return $name . ',我又被當(dāng)作參數(shù)啦,你還要我嗎?';

};


$func2 = function (callable $callback) {

    //執(zhí)行匿名回調(diào)并返回

    return $callback();

};

//用匿名函數(shù)做為參數(shù)調(diào)用

echo $func2($test), '<hr>';


//3.閉包函數(shù)當(dāng)用函數(shù)返回值使用

$func3 = function () {

    $name = '無(wú)忌哥哥';


    $test = function () use ($name) {

        return $name . ',我又被當(dāng)作參數(shù)啦,真倒霉~~';

    };

    return $test;

};


//你可能見到最多的是這種簡(jiǎn)寫形式

$func3 = function () {

    $name = '無(wú)忌哥哥';


    return function () use ($name) {

        return $name . ',我又被當(dāng)作返回值,掃地出門啦,你還要我嗎?';

    };

};


// $func3() 的返回值是一個(gè)函數(shù),所以再加一對(duì)圓括號(hào),才可以執(zhí)行

echo $func3()();


/**

 * 現(xiàn)在明白了,原來(lái)閉包可以當(dāng)作一個(gè)普通函數(shù)使用,也可以當(dāng)作函數(shù)參數(shù)使用,甚至可以當(dāng)作函數(shù)的返回值

 * 是的,閉包還有二個(gè)生效條件:第一,必須是定義一個(gè)匿名函數(shù),  第二,必須要執(zhí)行一次來(lái)生成閉包函數(shù)

 */



//以上就是最經(jīng)典的三種閉包使用場(chǎng)景,大家記住二點(diǎn)即可:

//第一,必須是定義一個(gè)匿名函數(shù),  第二,必須要執(zhí)行一次來(lái)生成閉包函數(shù)



批改老師:天蓬老師批改時(shí)間:2019-08-15 10:46:13
老師總結(jié):<?php /** * 教學(xué)內(nèi)容: 什么是閉包? * 1. 提到閉包,就不得不提匿名函數(shù),php官方手冊(cè)中,將閉包與匿名函數(shù)視為等同的 * 2. 閉包的三種使用場(chǎng)景: 函數(shù)內(nèi)部, 函數(shù)參數(shù), 函數(shù)返回值 */ /** * 老師,昨晚講的回調(diào),覺得匿名函數(shù)真的很強(qiáng)大,有人說(shuō),匿名函數(shù)主要用在閉包中,那么閉包又是什么呢? * 閉包并不是php的專利,很多編程語(yǔ)言都

發(fā)佈手記

熱門詞條