什麼是匿名函數
匿名函數
匿名函數(Anonymous functions),也稱為閉包函數(closures),允許 暫時建立一個沒有指定名稱的函數。最常用作回呼函數(callback)參數的值。當然,也有其它所應用的情況。
匿名函數目前是透過 Closure 類別來實現的。
匿名函數範例
<?php echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // 输出 helloWorld ?>
閉包函數也可以當作變數的值來使用。 PHP 會自動把此種表達式轉換成內建類別 Closure 的物件實例。把一個closure 物件賦值給一個變數的方式與普通變數賦值的語法是一樣的,最後也要加上分號:
匿名函數變數賦值範例
<?php $greet = function($name) { printf("Hello %s\r\n", $name); }; $greet('World'); $greet('PHP'); ?>
閉包可以從父作用域繼承變數。任何此類變數都應該用 use 語言結構傳遞進去。 PHP 7.1 起,無法傳入此類變數: superglobals、 $this 或和參數重名。
從父作用域繼承變數
<?php $message = 'hello'; // 没有 "use" $example = function () { var_dump($message); }; echo $example(); // 继承 $message $example = function () use ($message) { var_dump($message); }; echo $example(); // Inherited variable's value is from when the function // is defined, not when called $message = 'world'; echo $example(); // Reset message $message = 'hello'; // Inherit by-reference $example = function () use (&$message) { var_dump($message); }; echo $example(); // The changed value in the parent scope // is reflected inside the function call $message = 'world'; echo $example(); // Closures can also accept regular arguments $example = function ($arg) use ($message) { var_dump($arg . ' ' . $message); }; $example("hello"); ?>
以上例程的輸出類似於:
Notice: Undefined variable: message in /example.php on line 6 NULL string(5) "hello" string(5) "hello" string(5) "hello" string(5) "world" string(11) "hello world"
這些變數都必須在函數或類別的頭部聲明。從父作用域繼承變數與使用全域變數是不同的。全域變數存在於一個全域的範圍,無論目前在執行的是哪個函數。而 閉包的父作用域是定義該閉包的函數(不一定是呼叫它的函數)。
Closures 與作用域範例:
<?php // 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。 // 其中有一个方法用来计算购物车中所有商品的总价格,该方法使 // 用了一个 closure 作为回调函数。 class Cart { const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; protected $products = array(); public function add($product, $quantity) { $this->products[$product] = $quantity; } public function getQuantity($product) { return isset($this->products[$product]) ? $this->products[$product] : FALSE; } public function getTotal($tax) { $total = 0.00; $callback = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; array_walk($this->products, $callback); return round($total, 2);; } } $my_cart = new Cart; // 往购物车里添加条目 $my_cart->add('butter', 1); $my_cart->add('milk', 3); $my_cart->add('eggs', 6); // 打出出总价格,其中有 5% 的销售税. print $my_cart->getTotal(0.05) . "\n"; // 最后结果是 54.29 ?>
這篇文章就是匿名函數的介紹,希望對需要的朋友有幫助!
以上是什麼是匿名函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

匿名函數,又稱lambda表達式,是一種不指定名稱的函數,用於一次性使用或傳遞函數指標。特點有:匿名性、一次性使用、閉包、回傳類型推論。實戰中常用於排序或其他一次性函數呼叫。

作為一門現代化的程式語言,Golang(又稱Go語言)具有眾多強大的特性。其中,匿名函數是Golang的一個非常重要的概念,被廣泛應用於各種場景。在本文中,我們將深入分析Golang函數中匿名函數的應用場景。事件處理器在事件處理器中,匿名函數是一個非常方便且實用的工具。可以透過匿名函數向事件處理器傳遞自訂的邏輯,例如:funcmain(){bt

如何利用PHP7的匿名函數和閉包實現更靈活的程式碼邏輯處理?在PHP7之前,我們經常使用函數來封裝一段特定的邏輯,然後在程式碼中呼叫這些函數來實現特定的功能。然而,有時候我們可能需要在程式碼中定義一些臨時的邏輯塊,這些邏輯塊沒有必要創建一個獨立的函數,同時又不想在程式碼中引入太多的全域變數。 PHP7引入了匿名函數和閉包,可以很好地解決這個問題。匿名函數是一種沒有名

是的,Go語言中的匿名函數可以傳回多個值。語法:func(arg1,arg2,...,argN)(ret1,ret2,...,retM){//函數體}。使用方法:使用:=運算元接收回傳值;使用return關鍵字傳回多個值。

PHP8.0是目前最新版本的PHP程式語言。一項重要的更新是對匿名函數的改進和增強。匿名函數(也稱為閉包)是一種特殊類型的函數,可以在運行時動態建立並傳遞給其他函數或儲存在變數中。在PHP中,匿名函數對於高階程式設計和Web開發至關重要。 PHP8.0提供了一些新的語法和功能,可以使匿名函數更加靈活和易於使用。其中一些更新如下:函數參數的類型聲明在PHP8.0中,

pythonLambda表達式是一個小的匿名函數,它可以將一個表達式儲存在變數中並傳回它的值。 Lambda表達式通常用於執行簡單的任務,這些任務可以透過編寫一個單獨的函數來完成,但Lambda表達式可以使程式碼更簡潔和易讀。 Lambda表達式的語法如下:lambdaarguments:expressionarguments是Lambda表達式接收的參數列表,expression是Lambda表達式的體,它包含需要執行的程式碼。例如,以下Lambda表達式將兩個數字相加並傳回它們的和:lambdax,

如何使用PHP7的匿名函數和閉包實現更靈活可重複使用的程式碼邏輯?在PHP程式設計領域中,匿名函數和閉包是非常有價值且強大的工具。 PHP7引入了一些新的語言特性,使得使用匿名函數和閉包更加方便和靈活。本文將介紹如何使用PHP7的匿名函數和閉包來實現更靈活和可重複使用的程式碼邏輯,並提供一些具體的程式碼範例。一、匿名函數匿名函數是一種沒有名稱的函數。在PHP中,可以將匿名

pythonLambda表達式是一個強大且靈活的工具,可用於建立簡潔、可讀且易於使用的程式碼。它們非常適合快速建立匿名函數,這些函數可以作為參數傳遞給其他函數或儲存在變數中。 Lambda表達式的基本語法如下:lambdaarguments:expression例如,以下Lambda表達式將兩個數字相加:lambdax,y:x+y這個Lambda表達式可以傳遞給另一個函數作為參數,如下所示:defsum( x,y):returnx+yresult=sum(lambdax,y:x+y,1,2)在這個例子
