當前位置:首頁 > PHP教程 > php函數 > 列表

詳解PHP匿名函數與注意事項

發布:smiling 來源: PHP粉絲網  添加日期:2019-11-05 15:32:54 瀏覽: 評論:0 

php5.3不但引進了匿名函數還有更多更好多新的特性了,下面我們一起來了解一下PHP匿名函數與注意事項,具體內容如下

PHP5.2 以前:autoload, PDO 和 MySQLi, 類型約束

PHP5.2:JSON 支持

PHP5.3:棄用的功能,匿名函數,新增魔術方法,命名空間,后期靜態綁定,Heredoc 和 Nowdoc, const, 三元運算符,Phar

PHP5.4:Short Open Tag, 數組簡寫形式,Traits, 內置 Web 服務器,細節修改

PHP5.5:yield, list() 用于 foreach, 細節修改

PHP5.6:常量增強,可變函數參數,命名空間增強

現在基本上都使用PHP5.3以后的版本,但是感覺普遍一個現象就是很多新特性,過了這么長時間,還沒有完全普及,在項目中很少用到。

看看PHP匿名函數:

  1. 'test' => function(){ 
  2.  
  3.   return 'test' 
  4.  
  5. }, 

PHP匿名函數的定義很簡單,就是給一個變量賦值,只不過這個值是個function。

以上是使用Yii框架配置components文件,加了一個test的配置。

什么是PHP匿名函數?

看官方解釋:

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

匿名函數示例:

  1. <?php 
  2.  
  3. echo preg_replace_callback('~-([a-z])~'function ($match) { 
  4.  
  5.  return strtoupper($match[1]); 
  6.  
  7. }, 'hello-world'); 
  8.  
  9. // 輸出 helloWorld 
  10.  
  11. ?> 

閉包函數也可以作為變量的值來使用。PHP 會自動把此種表達式轉換成內置類 Closure 的對象實例。把一個 closure 對象賦值給一個變量的方式與普通變量賦值的語法是一樣的,最后也要加上分號:

匿名函數變量賦值示例:

  1. <?php 
  2.  
  3. $greet = function($name
  4.  
  5. //phpfensi.com 
  6.  printf("Hello %s\r\n"$name); 
  7.  
  8. }; 
  9.  
  10. $greet('World'); 
  11.  
  12. $greet('PHP'); 
  13.  
  14. ?> 

閉包可以從父作用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去。

從父作用域繼承變量

  1. <?php 
  2.  
  3. $message = 'hello' 
  4.  
  5. // 沒有 "use" 
  6.  
  7. $example = function () { 
  8.  
  9.  var_dump($message); 
  10.  
  11. }; 
  12.  
  13. echo $example(); 
  14.  
  15. // 繼承 $message 
  16.  
  17. $example = function () use($message) { 
  18.  
  19.  var_dump($message); 
  20.  
  21. }; 
  22.  
  23. echo $example(); 
  24.  
  25. // Inherited variable's value is from when the function 
  26.  
  27. // is defined, not when called 
  28.  
  29. $message = 'world'echo $example(); 
  30.  
  31. // Reset message 
  32.  
  33. $message = 'hello' 
  34.  
  35. // Inherit by-reference 
  36.  
  37. $example = function () use(&$message) { 
  38.  
  39.  var_dump($message); 
  40.  
  41. }; 
  42.  
  43. echo $example(); 
  44.  
  45. // The changed value in the parent scope 
  46.  
  47. // is reflected inside the function call 
  48.  
  49. $message = 'world'echo $example(); 
  50.  
  51. // Closures can also accept regular arguments 
  52.  
  53. $example = function ($arguse($message) { 
  54.  
  55.  var_dump($arg . ' ' . $message); 
  56. //phpfensi.com 
  57. }; 
  58.  
  59. $example("hello"); 
  60.  
  61. ?> 

php中的匿名函數的注意事項

在php5.3以后,php加入匿名函數的使用,今天在使用匿名的時候出現錯誤,不能想php函數那樣聲明和使用,詳細看代碼:

  1. $callback=function(){  
  2.  
  3.  return "aa";  
  4.  
  5. };  
  6.  
  7. echo $callback();  

打印出來是aa;

看下面的例子:

  1. echo $callback();  
  2.  
  3. $callback=function(){  
  4.  
  5.  return "aa";  
  6.  
  7. }; 

這時報錯了!$callback為未聲明,但是使用php自己聲明的函數都不會報錯的!

  1. function callback(){  
  2.  
  3.  return "aa";  
  4.  
  5. }  
  6.  
  7. echo callback(); //aa  
  8.  
  9. //phpfensi.com 
  10. echo callback(); //aa  
  11.  
  12. function callback(){  
  13.  
  14.  return "aa";  
  15.  
  16. }  

這兩個都打印出來aa;

在使用匿名函數的時候,匿名函數當做變量,須提前聲明,js中也是這樣的!!!!!

以上就是為大家介紹的PHP匿名函數與注意事項,希望對大家的學習有所幫助。

Tags: PHP匿名函數

分享到:

相關文章

天气网首页彩吧