PHP基礎知識之————匿名函數(Anonymous functions)


 

  匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。當然,也有其它應用的情況。

創建閉包

Example #1 匿名函數變量賦值示例(http://laravelacademy.org/post/4341.html)

<?php
$fun = function($name){
    printf("Hello %s\r\n",$name);
};
echo $fun('Tinywan');
echo $fun('Github');

打印結果:

Tinywan
Github

閉包和普通的PHP函數很像:常用的句法相同,也接受參數,而且能返回值。不過閉包沒有函數名。

注:我們之所以能調用$greet變量,是因為這個變量的值是一個閉包,而且閉包對象實現了__invoke()魔術方法,只要變量名后有(),PHP就會查找並調用__invoke方法。

  我們通常把PHP閉包當做函數會方法的回調使用,事實上,很多PHP函數都會用到閉包,比如array_map和preg_replace_callback,這是使用PHP匿名函數的絕佳時機。記住,閉包和其他值一樣,可以作為參數傳入其他PHP函數:

$numberPlusOne = array_map(function ($number) {
    return $number +=1;
}, [1, 2, 3]);
print_r($numberPlusOne);

 

function demo1(){
    function a(){
        echo 'a Function'."\r\n";
    }
     function b(){
        echo 'b Function';
    }
}
//a() 這樣是不可以的,直接報錯
demo1(); //demo()1調用了,a()函數就可以調用了, a();

在函數內部定義一個匿名函數,同時使用匿名函數,(這可不是閉包哦!!)

 

function funDemo(){
    $demo = function($str){
        echo $str;
    };
    //調用匿名函數,在這里調用是OK的!
    $demo('Tinywan');
}
funDemo(); //OK!
$demo('Github'); //嘗試調用匿名函數,發生錯誤!

錯誤信息:

Fatal error: Uncaught Error: Function name must be a string in E:\wamp64\www\php-net\function\Example#2.php on line 32
Error: Function name must be a string in E:\wamp64\www\php-net\function\Example#2.php on line 32

 

 

 

function funDemo(){
    $str1 = 100; //外部函數變量
    $str2 = 200;
    //閉包可以從父作用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去。
    $demo = function() use ($str1,$st){
        echo $str1."\r\n";
        echo $str2;
    };
    $demo("Tinywan");
}
funDemo(); //OK!

打印結果:100 200

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM