PHP函數(shù)(1)

網(wǎng)站建設(shè)開(kāi)發(fā)過(guò)程中,經(jīng)常需要反復(fù)重復(fù)某種操作或者處理,如數(shù)據(jù)查詢、字符串操作等,如果每個(gè)模塊的操作都需要重復(fù)輸入一次代碼,不僅執(zhí)行效率低,而且后期維護(hù)都比較麻煩,這時(shí)不妨考慮使用函數(shù)來(lái)解決這個(gè)難題。

定義和調(diào)用函數(shù)

在PHP語(yǔ)言中,定義函數(shù)的語(yǔ)法格式如下:

function fun_name($arg_1, $arg_2, ..., $arg_n){    fun_body;}

其中,function表示聲明自定義函數(shù)必須使用的關(guān)鍵字,fun-name表示函數(shù)的名稱,$arg-1、$arg-2、$arg-n等為函數(shù)的參數(shù),參數(shù)之間通過(guò)逗號(hào)分隔,參數(shù)個(gè)數(shù)不限,也可以省略參數(shù)。

函數(shù)名和PHP中的其他標(biāo)識(shí)符命名規(guī)則相同。有效的函數(shù)名以字母或下劃線打頭,后面跟字母、數(shù)字或下劃線??梢杂谜齽t表達(dá)式表示為:[a-zA-Z-\x7f-\xff][a-zA-Z0-9-\x7f-\xff]*。函數(shù)名是大小寫(xiě)無(wú)關(guān)的,不過(guò)在調(diào)用函數(shù)時(shí),通常使用其在定義時(shí)相同的形式。

fun-body表示函數(shù)體,在函數(shù)體中可以包含任意多行代碼,這些代碼是函數(shù)的功能主體,并由這些代碼執(zhí)行和完成指定的任務(wù)。注意,任何有效的PHP代碼都有可能出現(xiàn)在函數(shù)內(nèi)部,甚至包括其他函數(shù)和類(lèi)定義。

當(dāng)定義好函數(shù)之后,就可以調(diào)用函數(shù)了,調(diào)用函數(shù)的方法比較簡(jiǎn)單,只需要引用函數(shù)名,并賦予正確的參數(shù)即可,格式如下:

fun-name($arg-1, $arg-2, ..., $arg-n) ;

函數(shù)必須在其調(diào)用之前定義。例如,下面示例中在自定義函數(shù)中定義函數(shù),然后分別進(jìn)行調(diào)用。

<?phpfunction foo(){    function bar() {    echo "I don't exist until foo() is called.\n";  }}/*現(xiàn)在還不能調(diào)用bar()函數(shù),因?yàn)樗€不存在*/foo();/*現(xiàn)在可以調(diào)用bar()函數(shù)了,因?yàn)閒oo()函數(shù)   的執(zhí)行使得bar()函數(shù)變?yōu)橐讯x的函數(shù)*/bar();?>

在PHP中所有函數(shù)都具有全局作用域,可以在內(nèi)部定義,在外部調(diào)用,反之亦然。

注意:PHP不支持函數(shù)重載,也不可能取消定義或者重定義已聲明的函數(shù)。

在PHP中可以調(diào)用遞歸函數(shù)。如:

<?phpfunction recursion($a){    if ($a < 20) {        echo "$a\n";        recursion($a + 1);  //調(diào)用函數(shù)自身    }}?>

在調(diào)用遞歸函數(shù)時(shí),應(yīng)該設(shè)置循環(huán)調(diào)用的條件和次數(shù),因?yàn)榭赡軙?huì)破壞堆棧從而使當(dāng)前腳本終止。

函數(shù)參數(shù)

通過(guò)參數(shù)列表可以傳遞信息給函數(shù),這個(gè)信息列表是以逗號(hào)作為分隔符的表達(dá)式列表。在調(diào)用函數(shù)時(shí),需要向函數(shù)傳遞參數(shù),被傳入的參數(shù)被稱為實(shí)參,而在定義函數(shù)時(shí)指定的參數(shù),被稱為形參。參數(shù)傳遞的方式有按值傳遞、按引用傳遞和默認(rèn)參數(shù)3種。

  1. 按值傳遞參數(shù)

將實(shí)參的值復(fù)制到對(duì)應(yīng)的形參中,在函數(shù)內(nèi)部的操作針對(duì)形參進(jìn)行,操作的結(jié)果不會(huì)影響到實(shí)參,即函數(shù)返回后,實(shí)參的值不會(huì)改變。如:

<?phpfunction fun($m){    $m = $m * 2 +  1;    echo "在函數(shù)內(nèi):\$m = ".$m;     //顯示11}$m = 5;fun($m);                           //調(diào)用函數(shù)echo "在函數(shù)外:\$m = ".$m;        //顯示5?>

2. 按引用傳遞參數(shù)

按引用傳遞參數(shù)是將實(shí)參的內(nèi)存地址傳遞給形參中,這時(shí)在函數(shù)內(nèi)部的所有操作都會(huì)影響到實(shí)參的值,此時(shí)再次調(diào)用實(shí)參,也會(huì)發(fā)現(xiàn)實(shí)參的值發(fā)生變化。如:

<?phpfunction fun(&$m){    $m = $m * 2 +  1;    echo "在函數(shù)內(nèi):\$m = ".$m;     //顯示11}$m = 5;fun($m);                           //調(diào)用函數(shù)echo "在函數(shù)外:\$m = ".$m;        //顯示11?>

3. 默認(rèn)參數(shù)(可選參數(shù))還有一種設(shè)置參數(shù)的方式,即可選參數(shù)。可以指定某個(gè)參數(shù)為可選參數(shù),將可選參數(shù)放置在參數(shù)列表的末尾,并且指定其默認(rèn)值。如:

<?phpfunction fun(&$m, $n=0){    $l = $m  +  $n;    if($n == 0)        echo "\$m = ".$l."<p>";    else        echo "\$m  +  \$n = ".$l."<p>";}$m = 5;$n = 5;fun($m);                     //顯示:$m = 5fun($m, $n);                 //顯示:$m + $n = 10?>

PHP還允許使用數(shù)組和特殊類(lèi)型NULL作為默認(rèn)參數(shù),默認(rèn)值必須是常量表達(dá)式,不能是諸如變量、類(lèi)成員,或者函數(shù)調(diào)用等表達(dá)式。

注意:當(dāng)使用默認(rèn)參數(shù)時(shí),任何默認(rèn)參數(shù)必須放在任何非默認(rèn)參數(shù)的右側(cè);否則,函數(shù)將不會(huì)按照預(yù)期的情況工作。

網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)咨詢專(zhuān)線:0871-63535511(點(diǎn)擊可一鍵撥號(hào))