2024 PHP Conference Japan

使用者自訂函式

可以使用以下語法定義函式

範例 #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 字元 AZ 的範圍內不區分大小寫,儘管通常最好以函式在其宣告中出現的方式呼叫它們。

函式支援不定數量參數預設參數。另請參閱函式參考文件 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 個遞迴層級可能會導致堆疊溢位,並終止目前的腳本。尤其要注意的是,無限遞迴被視為程式錯誤。

新增註記

使用者貢獻的註記

此頁面沒有使用者貢獻的註記。
To Top