PHP函數的一些冷知識

來源:互聯網
上載者:User

函數嵌套

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.