函數(shù)是執(zhí)行特定任務(wù)的自包含代碼塊。
函數(shù)避免重復(fù)代碼。它們使得更容易消除錯(cuò)誤。
函數(shù)可以在其他腳本中重用。他們幫助你分解一個(gè)大項(xiàng)目。
函數(shù)通常接受一個(gè)或多個(gè)參數(shù),它們是由調(diào)用它的代碼傳遞給函數(shù)的值。
然后函數(shù)可以讀取并處理這些參數(shù)。
函數(shù)可以可選地返回可以由調(diào)用代碼讀取的值。
這樣,調(diào)用代碼可以與函數(shù)通信。
我們用function關(guān)鍵字定義函數(shù),后面是函數(shù)的名稱和兩個(gè)括號。
你的函數(shù)將執(zhí)行的實(shí)際代碼大括號之間。
定義函數(shù)使用以下語法:
function myFunc() { // (do stuff here) }
定義函數(shù)
<?PHP function hello() { echo "Hello, world!\n"; } hello(); ?>
上面的代碼生成以下結(jié)果。
正如你可以看到,這個(gè)腳本定義一個(gè)函數(shù),hello(),只是顯示string“Hello,world!"
hello()函數(shù)中的代碼僅在稍后調(diào)用函數(shù)時(shí)運(yùn)行,而不是當(dāng)函數(shù)本身被創(chuàng)建時(shí)。
函數(shù)可以從函數(shù)返回一個(gè)值使用return語句。
如果你試圖給一個(gè)變量賦值一個(gè)函數(shù)的返回值沒有返回值,你的變量將被設(shè)置為NULL。
從函數(shù)返回值
<?PHP function foo() { print "In function"; return 1; print "Leaving function..."; } print foo(); ?>
上面的代碼生成以下結(jié)果。
除了通過引用將變量傳遞給函數(shù),你也可以得到返回引用的函數(shù),而不是價(jià)值觀。
在函數(shù)中的函數(shù)名稱前添加一個(gè)&符號定義。 然后,當(dāng)您使用return語句返回一個(gè)變量時(shí),你傳遞一個(gè)引用變量返回調(diào)用代碼,而不是變量的s值:
function &myFunc(){ // (do stuff) return $var; // Returns a reference to $var }
從函數(shù)返回引用
<?PHP $myNumber = 5; function &getMyNumber() { global $myNumber; return $myNumber; } $numberRef = &getMyNumber(); $numberRef++; echo "\$myNumber = $myNumber\n"; // Displays "6" echo "\$numberRef = $numberRef\n"; // Displays "6" ?>
上面的代碼生成以下結(jié)果。
遞歸函數(shù)是調(diào)用自身的函數(shù)。
這里是一個(gè)遞歸函數(shù)如何操作的快速概述:
遞歸函數(shù)由調(diào)用代碼調(diào)用如果滿足基本情況,則該函數(shù)需要計(jì)算,然后退出。
否則,該函數(shù)需要計(jì)算,然后調(diào)用自身繼續(xù)遞歸。
這里是一個(gè)計(jì)算階乘的例子:
<?PHP function factorial($number) { if ($number == 0) return 1; return $number * factorial($number-1); } print factorial(6); ?>
上面的代碼生成以下結(jié)果。
下面的代碼顯示了如何創(chuàng)建遞歸函數(shù)。
<?php function checkInteger($Number) { if($Number > 1) { // integer minus one is still an integer return(checkInteger($Number-1)); } elseif($Number < 0) { //numbers are symmetrical, so //check positive version return(checkInteger((-1)*$Number-1)); } else { if(($Number > 0) AND ($Number < 1)) { return("no"); } else { //zero and one are //integers by definition return("yes"); } } } print("Is 0 an integer? " . checkInteger(0) . "<br>\n"); print("Is 7 an integer? " . checkInteger(7) . "<br>\n"); print("And 3.5? " . checkInteger(3.5) . "<br>\n"); print("What about -5? " . checkInteger(-5) . "<br>\n"); print("And -9.2? " . checkInteger(-9.2) . "<br>\n"); ?>
上面的代碼生成以下結(jié)果。
PHP匿名函數(shù)沒有名稱。
您可能需要?jiǎng)?chuàng)建匿名函數(shù),有兩個(gè)原因:
要?jiǎng)?chuàng)建匿名函數(shù),請使用分隔的參數(shù)列表(如果有)和函數(shù)體的代碼。
$myFunction = create_function( "$param1, $param2", "function code here;" );
這里是一個(gè)基于變量值動態(tài)創(chuàng)建匿名函數(shù)的示例:
<?PHP $mode = "+"; $processNumbers = create_function( "$a, $b", "return \$a $mode \$b;" ); echo $processNumbers( 2, 3 ); // Displays "5" ?>
上面的代碼生成以下結(jié)果。
該代碼使用$ mode變量的值作為運(yùn)算符用于處理其兩個(gè)參數(shù)$ a和$ b。例如,如果將$ mode更改為“*",代碼將顯示“6"。
下面的代碼顯示了如何動態(tài)調(diào)用函數(shù)。
<?php function write($text) { print($text); } function writeBold($text) { print("<b>$text</b>"); } $myFunction = "write"; $myFunction("Hello!"); print("<br>\n"); $myFunction = "writeBold"; $myFunction("Goodbye!"); print("<br>\n"); ?>
上面的代碼生成以下結(jié)果。
更多建議: