標題:
[教學]
(PHP+IIS+MsSQL教學第12篇) 函數
[打印本頁]
作者:
小誌
時間:
2010-5-13 20:02
標題:
(PHP+IIS+MsSQL教學第12篇) 函數
函數
函數是將程式敘述獨立出來的一種機制,並且可以在其他的程序中加以呼叫使用,因此,被封裝於副程式中的敘述是不屬於任何的程式區段的,但是,這些敘述卻可以被其他單元重複呼叫使用,所以,我們就會把這些需要重複撰寫的程式敘述封裝起來成為函數,避免因重複撰寫程式敘述而浪費開發時間。其宣告格式如下:
函數宣告格式
function 函數名(參數1, 參數2…)
{
…
//函數敘述區段
…
}
複製代碼
函數的宣告由「function」保留字開始,而以「}」為函數的結尾。
介於「{」與「}」之間的區段,就是撰寫函數內容敘述的地方。
每個函數的名稱都是獨一無二的,不可使用重複的名稱。
例如:
function MySub()
{
echo “函數測試”;
}
複製代碼
函數的執行
不要以為我們把上例的函數寫好後,執行程式網頁就會出現「函數測試」這幾個字ㄡ,要執行函數內的程式敘述必須先呼叫執行函數,怎麼呼叫?把函數名稱當成一個敘述就行了:
<?
function MySub()
{
echo "函數測試";
}
?>
<HTML>
<HEAD>
<TITLE>ex04_21</TITLE>
</HEAD>
<BODY>
<?
MySub(); //呼叫函數
?>
</BODY></HTML>
複製代碼
函數的參數傳遞
您喜歡過一成不變單調古板的日子嗎?我想一定是千百個不願意!相對於我們的函數也一樣,例如我們上一個範例,即使它可以被重複呼叫使用,但每次只會呆呆的列印「函數測試」這幾個字,這太不環保了吧!最好是:我希望它輸出什麼它就輸出什麼。
為了讓函數達到真正的實用性,我們可以在函數中加入參數傳遞的功能,例如:
//含有一個參數的函數
function MySub($x)
{
echo $x;
}
//含有兩個參數的函數
function YourSub($y,$z)
{
echo ($y*$z);
}
複製代碼
執行有參數的函數
當我們要呼叫具有參數的函數時,只要在呼叫函數時加入參數資料即可,例如:我們要呼叫上例中的MySub與YourSub函數。
//呼叫含有一個參數的函數
MySub("字串輸出");
//含有兩個參數的函數
YourSub(3,5);
複製代碼
以YourSub函數來說,呼叫函數時會以3、5來替代參數y、z的值,所以當執行YourSub函數內的「echo($y*$z);」敘述時,就會在網頁中輸出3乘5的結果15。
[attach]381[/attach]
傳遞變數給有參數的函數
當我們要呼叫具有參數的函數時,在呼叫函數時加入的參數資料不一定必須是常數,傳遞變數亦即可,例如:
<?
//含有兩個參數的函數
function YourSub($y,$z)
{
echo ($y*$z); //輸出答案
}
?>
<HTML>
<HEAD>
<TITLE>ex04_22</TITLE>
</HEAD>
<BODY>
<?
$I=10;
$J=2;
//呼叫含有兩個參數的函數
YourSub($I,$J);
?>
</BODY></HTML>
複製代碼
作者:
小誌
時間:
2010-5-13 20:10
函數的放置位置
函數完成了,那我們要放在哪裡呢?直接放置在「<? ?>」之中就好了ㄚ!例如下例,粗體字的部分的部分就是函數區段,而粗體字的部分之外的就是主程式的區段:
<?
$mymoon=date("n");
moontest($mymoon);
function moontest($moon)
{
switch ($moon)
{
case 1: case 2: case 3:
echo "春天";
break;
case 4: case 5: case 6:
echo "夏天";
break;
case 7: case 8: case 9:
echo "秋天";
break;
case 10: case 11: case 12:
echo "冬天";
break;
}
}
?>
複製代碼
函數是將「程式敘述獨立出來」的一種機制,並且可以在其他的程序中加以呼叫使用,所以,應該儘量避免將函數混雜於其他程式區段中,通常我們都會將函數區段擺放於主程式區段的最上方或最下方。
[attach]382[/attach]
您不必擔心呼叫函數後,程式敘述進入函數以後就回不來了,當我們呼叫副程式而進入副程式敘述區段後,副程式中的敘述逐一執行後,遇到『}』時,函數就會結束而「返回」呼叫函數敘述的下一個敘述繼續執行。
不過,筆者習慣將函數獨立使用一組「<? ?>」保括起來,並擺放於PHP網頁程式中的最上方:
<?
function moontest($moon)
{
switch ($moon)
{
case 1: case 2: case 3:
echo "春天";
break;
case 4: case 5: case 6:
echo "夏天";
break;
case 7: case 8: case 9:
echo "秋天";
break;
case 10: case 11: case 12:
echo "冬天";
break;
default:
echo "錯誤";
}
}
?>
<HTML>
<HEAD>
<TITLE>ex04_23</TITLE>
</HEAD>
<BODY>
<?
$mymoon=date("n");
moontest($mymoon);
?>
</BODY></HTML>
複製代碼
實做練習:
撰寫一個計算1*2*3*…N計算結果的函數
<?
function MyTest($num)
{
$ans=1;
for ($x=1 ; $x<=$num ; $x++)
{
$ans=$ans * $x ;
}
echo $ans;
}
?>
複製代碼
作者:
小誌
時間:
2010-5-13 20:16
函數的回傳值
前面我們說明了函數的使用方法與參數的傳遞,但是呼叫函數後,函數直接將處理結果在函數內就輸出至網頁中,嚴格來說,這種類型的函數只能稱之為「副程式(Subprogram)」,因為函數沒有將處理結果傳回呼叫它的主程式區段。
要讓將處理結果傳回呼叫它的主程式區段,可在函數即將結束之前,使用「return」命令傳回特定的資料值成為函數的回傳值,例如:
<?
function MyTest($num)
{
$ans=1;
for ($x=1 ; $x<=$num ; $x++)
{
$ans=$ans * $x ;
}
return $ans; //回傳運算結果
}
?>
複製代碼
提示
呼叫函數時,有參數傳遞時,參數之外要用一對括號包括起來,若無參數傳遞時,加不加括號都可以,不過,習慣上在呼叫函數時,即使沒有參數傳遞都還是會加上一對括號。
實做學習:
寫一函數,傳入數字1~12,接著回傳該數字對應的季節,例如傳入參數3回傳「春天」。
<?
function moontest($moon)
{
switch ($moon)
{
case 1: case 2: case 3:
return "春天";
break;
case 4: case 5: case 6:
return "夏天";
break;
case 7: case 8: case 9:
return "秋天";
break;
case 10: case 11: case 12:
return "冬天";
break;
default:
echo "錯誤";
}
}
?>
<HTML>
<HEAD>
<TITLE>test04_01</TITLE>
</HEAD>
<BODY>
<?
//抓取系統日期時間目前的月份
$mymoon=date("n");
//呼叫函數取得對應的季節
$season=moontest($mymoon);
echo "目前季節為 : $season";
?>
</BODY></HTML>
複製代碼
實做學習:
寫一函數,將傳入的字串反向列印出來,例如傳入Microsoft回傳輸出tfosorciM,本題有點深度,運用到內建的strlen()、substr()字串函數。
<?
function Mystring($testword)
{
$strlong=strlen($testword);
$ansstr="";
for ($x=$strlong ; $x>=0 ; $x--)
{
$ansstr=$ansstr . substr($testword,$x,1);
}
return $ansstr;
}
?>
<HTML>
<HEAD>
<TITLE>test04_02</TITLE>
</HEAD>
<BODY>
<?
$test="Microsoft";
echo (Mystring($test));
?>
</BODY></HTML>
複製代碼
strlen()函數
語法:strlen(”string”)
用途:計算引數中字串的字元數目(Long)
$myStr= “Hello PHP”;
$myLen = strlen($mystr); //$'myLen = 9
複製代碼
substr()函數
語法:strsub(字串, 開始字元, 指定長度)
用途:傳回由字串中指定字元數開始,由左至右取得指定長度字元的字串
$myStr= “Hello PHP”;
$strMid = substr($myStr); //$'strMid = "lo P"
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)