天天看點

函數 - PHP手冊筆記

函數無需在調用前被定義,除非是有條件定義的。

PHP中的所有函數和類都具有全局作用域。PHP不支援函數重載,也不可能取消定義或者重定義已聲明的函數。

特意試了下,我的電腦上的PHP遞歸棧的最大深度為100。

PHP支援按值傳遞參數(預設)、通過引用傳遞參數以及預設參數。也支援可變長度參數清單。PHP允許使用數組和特殊類型<code>NULL</code>作為預設參數。如果希望允許函數修改參數值,必須通過引用傳遞參數。

注意!當使用預設參數時,任何預設參數必須放在任何非預設參數的右側,否則函數将不按照預期工作。

PHP在使用者自定義函數中支援可變數量的參數清單。在PHP 5.6及以上的版本中,有<code>...</code>文法實作,可以這樣寫,由于沒有合适的環境也無法測試。

當然在PHP 5.5等低版本中也可以使用可變數量的參數清單。通過函數<code>func_num_args()</code>、<code>func_get_arg()</code>、<code>gunc_get_args()</code>獲得參數數目、某一參數内容、參數數組。

函數不能傳回多個值,但可以通過傳回一個數組來得到類似的效果。

從函數傳回一個引用,必須在函數聲明和指派傳回值給一個變量時都使用引用運算符<code>&amp;</code>。

PHP支援可變函數,也就是說,如果一個變量名後有圓括号,PHP将尋找與變量的值同名的函數,并且嘗試執行它。可變函數可以用來實作回調函數、函數表等,雖然這些我都沒用過。

當調用靜态方法時,函數調用要比靜态屬性優先。

PHP有很多标準的函數和結構,還有一些函數需要和特定的PHP擴充子產品一起編譯。

如果傳遞給函數的參數類型與實際的類型不一緻,那麼函數的傳回值是不确定的。在這種情況下,通常函數會傳回<code>NULL</code>。但這僅僅是一個慣例,并不一定如此。

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

手冊中的第一個示例程式是正規表達式相關的,不是很了解.第二個示例程式是一個匿名函數變量指派。注意,匿名函數變量的定義語句結尾要加分号。

第三個示例程式,關于從父作用域繼承變量,也沒看懂,好遺憾。第四個示例程式,關于Closures和作用域,和實際相結合,不錯的,仔細看看。

這是一個基本的購物車類,實作了添加某數量的商品并計算總價格的功能。其中使用了一個closure作為回調函數。

注意!匿名函數語句末尾的分号一定不要落下!

(全文完)