- 定義
函數(shù)是一段被命名的榛丢、完成特定任務(wù)的代碼枪芒,它可以接受一系列的值或者參數(shù)彻况,也可能返回一個單值。 - 優(yōu)點(diǎn)
節(jié)省編譯時間:無論調(diào)用多少次舅踪,僅為當(dāng)前頁面編譯一次纽甘。
提高可讀性。
調(diào)用函數(shù)
$length = strlen("PHP");
$result = sin(asin(1)); // 函數(shù)被其他函數(shù)調(diào)用
$result = unlink("function.txt") or die("操作失敵槁怠悍赢!"); // 通過參數(shù)影響外部事物
定義函數(shù)
函數(shù)語句里面可以包含html內(nèi)容。
<?php
function column()
{
?>
<td></td>
<?php
}
函數(shù)在執(zhí)行期間遇到return語句咬展,控制權(quán)會返回到調(diào)用該函數(shù)的語句泽裳,并且求值結(jié)果將作為函數(shù)返回值瞒斩。
function strcat($left, $right)
{
$combinedString = $left . $right;
return $combinedString;
}
變量作用域
- 全局變量
$a = 3;
function foo()
{
global $a;
$a += 2;
}
或
$var = $GLOBAL['var'];
- 靜態(tài)變量
靜態(tài)變量在所有對該函數(shù)的調(diào)用中是共享的破婆,在函數(shù)第一次被調(diào)用時初始化。
函數(shù)參數(shù)
- 按值傳遞
傳遞時PHP必須復(fù)制值胸囱。 - 按引用傳遞
按引用傳遞參數(shù)允許函數(shù)直接訪問和操作參數(shù)變量祷舀。參數(shù)必須是變量。變量名前加&烹笔。
function double(&$value)
{
$value = $value << 1;
}
$a =3;
double($a);
echo $a; //6
可以給引用參數(shù)指定默認(rèn)值裳扯。
不復(fù)制值。
- 默認(rèn)參數(shù)
在函數(shù)聲明中給函數(shù)賦值谤职。賦給函數(shù)的默認(rèn)值不能是復(fù)雜表達(dá)式饰豺,而只能是標(biāo)量值。
function getPreferences($whichPreference = 'all')
{
// 如果是all, 返回所有配置
// 否則得到指定配置
}
它們必須列在沒有默認(rèn)值的參數(shù)后面允蜈。
- 可變參數(shù)
完全省略參數(shù)塊冤吨。
func_get_args(); //參數(shù)數(shù)組
func_num_args(); //參數(shù)個數(shù)
func_get_args(0); //第一個參數(shù)值
函數(shù)結(jié)果不能作為一個參數(shù)直接給其他函數(shù)使用蒿柳。
- 遺漏參數(shù)
遺漏參數(shù)也可用,但會警告漩蟆。 - 類型提示
可以要求參數(shù)是特定的類(包括類的繼承或接口)的實(shí)例垒探,繼承自特定接口的實(shí)例,數(shù)組怠李,或回調(diào)圾叼。
在參數(shù)前添加類名,數(shù)組(array)捺癞,或回調(diào)(callable)來實(shí)現(xiàn)提示夷蚊。
返回值return
要返回多個值,可以返回一個數(shù)組髓介。
沒有通過return返回值撬码,則返回值為null。
默認(rèn)情況下版保,復(fù)制出值呜笑。
返回引用,要在函數(shù)名前加&彻犁,并把函數(shù)返回值返回給一個變量叫胁。
$name = ["aa", "bb"];
function &findOne($n)
{
global $name;
return $name[$n];
}
$person = &findOne(1);
$person = "cc"; // 改變name[1]
可變函數(shù)
$variable();
if (function_exists($witch))
{
$witch();
}
echo()和isset()語言結(jié)構(gòu)不能當(dāng)作變量函數(shù)使用。
匿名函數(shù)(閉包)
某些PHP函數(shù)使用你所提供的函數(shù)來完成它們的部分功能汞幢。例如usort()驼鹅。為了反映回調(diào)函數(shù)的短暫特性,我們創(chuàng)建和使用一個匿名函數(shù)森篷。
usort($array, function($a, $b) {
return strlen($a) - strlen($b);
} );