可以使用以下語法定義函式
範例 #1 虛擬碼示範函式用法
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "範例函式。\n";
return $retval;
}
?>
任何有效的 PHP 程式碼都可以出現在函式內部,甚至是其他函式和 類別 定義。
PHP 的函式名稱遵循與其他標籤相同的規則。有效的函式名稱以字母或底線開頭,後跟任意數量的字母、數字或底線。以正規表示式表示如下:^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
。
另請參閱使用者端命名指南。
函式無需在被引用之前定義,除非函式是在條件式中定義的,如下列兩個範例所示。
當函式以條件式定義,如所示的兩個範例。它的定義必須在被呼叫之前處理。
範例 #2 條件式函式
<?php
$makefoo = true;
/* 我們無法從這裡呼叫 foo()
因為它還不存在,
但我們可以呼叫 bar() */
bar();
if ($makefoo) {
function foo()
{
echo "直到程式執行到我這裡,我才存在。\n";
}
}
/* 現在我們可以安全地呼叫 foo()
因為 $makefoo 的值為 true */
if ($makefoo) foo();
function bar()
{
echo "程式一開始我就存在了。\n";
}
?>
範例 #3 函式中的函式
<?php
function foo()
{
function bar()
{
echo "直到 foo() 被呼叫,我才存在。\n";
}
}
/* 我們還不能呼叫 bar()
因為它還不存在。 */
foo();
/* 現在我們可以呼叫 bar() 了,
foo() 的處理過程
使它變得可存取。 */
bar();
?>
PHP 中的所有函式和類別都具有全域作用域 — 即使它們是在函式內部定義的,也可以在函式外部呼叫它們,反之亦然。
PHP 不支援函式重載,也不可能取消定義或重新定義先前宣告的函式。
注意: 函式名稱在 ASCII 字元
A
到Z
的範圍內不區分大小寫,儘管通常最好以函式在其宣告中出現的方式呼叫它們。
函式支援不定數量參數和預設參數。另請參閱函式參考文件 func_num_args()、func_get_arg() 和 func_get_args() 以取得更多資訊。
可以在 PHP 中呼叫遞迴函式。
範例 #4 遞迴函式
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
注意事項:遞迴函式/方法呼叫超過 100-200 個遞迴層級可能會導致堆疊溢位,並終止目前的腳本。尤其要注意的是,無限遞迴被視為程式錯誤。