函數嵌套
PHP中函數中可以嵌套定義一個函數,這和C#等語言不一樣。嵌套定義的函數,必須要等到外圍函數運行後,才有效。也就是說,外圍函數的運行,使得系統中重新定義了一個新的函數。
<?phpfunction a(){ function b() { echo "function b<br>"; } echo "function a<br>";}//b();//無法運行,未定義a();b();?>
一開始如果運行b()。會報錯,因為系統找不到b函數,但是運行a函數後,a中的定義b函數的語句也運行了,因此系統中有了b函數。因此接下來運行b函數也就可以了。
運行結果為:
function a
function b
global變數
這個關鍵字的使用,php開發中都應當很熟悉。在函數中使用全域變數前,都需要加上global標示。事實上,可以理解為global標示的變數是函數外部全域變數的一個別名。使用global關鍵字等價於在 $GLOBALS變數中建立一個對變數的引用。
<?php$var=100;function a(){ global $var; $var=$var+1; echo $var."<br/>";}a();echo $var."<br/>";?>
等價於下面的寫法
<?php$var=100;function a(){ $GLOBALS["var"]=$GLOBALS["var"]+1; echo $GLOBALS["var"]."<br/>";}a();echo $var."<br/>";?>
最終都是輸出 101 101
靜態變數
和C#語言不同,PHP的函數中允許有靜態變數,其使用方式和類中的靜態變數類似。
預設參數和可變參數
和C#相同,PHP的函數也支援預設參數和可變參數。概念和C#差不多。
function a($a,$b=100){echo ($a+$b)."<BR>";}a(100,10);a(100);
PHP的函數有時候需要一個不定長度的參數,此時只需要將函數的參數置空即可。在PHP中,調用函數的時候,輸入的參數比定義的參數還多,是不會報錯的,PHP只會根據順序取它需要的參數即可。如果PHP輸入的參數比預設的少,則會報錯。PHP中可以通過下面三個內建的方法,獲得參數的資訊。
$array = func_get_args();$count = func_num_args();$value = func_get_arg(argument_number);
看個例子就能明白了
<?phpfunction addall(){ $array = func_get_args(); echo "參數數組:" ; print_r($array);echo "<br>"; $count = func_num_args(); echo "參數個數:" ;print ($count);echo "<br>"; $sum=0; for($i=0;$i<$count;$i++) { $value = func_get_arg($i); echo "第 $i 個參數的值是 $value <br>"; $sum+=$value; } echo "總和$sum";echo "<br>";}addall(100,10,20,13);?>
650) this.width=650;" style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px" title="CA43B887143048948DD3075EB80CB7E8" border="0" alt="CA43B887143048948DD3075EB80CB7E8" src="http://www.bkjia.com/uploads/allimg/131228/11264Hc9-0.jpg" height="118" />
類型暗示
預設的,PHP函數中,不需要知道變數的類型。但是在某些場合,我們需要某些函數只接受特定的類型。那麼需要對該這個函數的參數採取類型暗示。
文法方式和C#定義函數那樣,在參數前面指定參數類型即可。看下面的例子:
<?phpclass A{}class B extends A{}class C{}function test (A $a, B $b){}test(new a,new b); // 可以運行test(new b,new b); // 可以運行test(new a,new a); // 報錯test(new a, new c); // 報錯?>
如果函數test的定義為function test ($a, $b){},那麼下面的4個調用方法都是可以啟動並執行。
但是一旦指定了參數類型,則最後2個調用會失敗,因為不符合參數類型。
可變函數
類似可變變數那樣,函數名也可以通過變數表示
<?phpfunction fa (){ echo "fa running...<br>";}function fb (){ echo "fb running...<br>";}$f="fa";$f();//等價於調用fa()$f="fb";$f();//等價於調用fb()?>
匿名函數
和C#中的匿名函數概念一樣,PHP中也有匿名函數的概念,PHP支援通過內建函數來建立函數的功能。根據php手冊上的例子,
<?php $newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);'); echo "New anonymous function: $newfunc\n"; echo $newfunc(2, M_E) . "\n"; // outputs // New anonymous function: lambda_1 // ln(2) + ln(2.718281828459) = 1.6931471805599 ?>
$newfunc就類似於c#中的委託類型可以通過它調用建立的函數。
本文出自 “一隻部落格” 部落格,請務必保留此出處http://cnn237111.blog.51cto.com/2359144/1282642