php函數基本語法之自訂函數
PHP提供了功能強大的函數,但這遠遠滿足不了需要,程式設計師可以根據需要自己建立函數。本節就開始學習建立函數的方法。
我們在實際開發過程當中需要有很多功能都需要重複使用到,而這些反覆需要使用到的功能,我們能定義成功能(函數),就盡可能定義成功能(函數)。使用的時候,吼一下它的名字即可。
那我們來學一下自訂函數的語法規定,語法規定如下:
function 函数名([参数名1[=值1], 参数名2[=值2], 参数名n[=值n]])
{
函数中的功能体
[return 返回值]
}上面的語法規定中發現瞭如下特點,產生如下語未能規定:
1.函數以function開始
2.function後面接空格,空格後接函數名稱
3.函數名稱與變數命名規則基本上一樣,但不同的是:函數名稱不區分大小寫
4.所謂參數其實就是變數
5.函數名後接括號,括號內接參數,參數全都有[](中括號))所有這些都有起來了,代表參數可填可不填
6.如果有參數的話,參數後可以接(=)等號,等號接預設值。參數值也是用[](中括號)括起來的,代表選填
7.函數後的參數變量,主要功能是將函數體外的變量值,傳入函數體內來使用,函數體的變數和函數體外的變數通常是兩個不 同的變數。
8.函數中的特定功能(功能體)用大括號括起來,代表這是一個函數的功能區間
9.函數可以有回傳值也可以沒有回傳值,用[](中括號)括起來的,代表選填。
10.return後接空格,空格後接回傳值,若有return,return後的程式碼皆不執行。
11.函數的執行上沒有順序關係,定義處之前的位置可以呼叫
12.函數不能定義兩次,即函數不能被重載
#記得:你也要多寫程式碼來進行實驗!
我們可以用實驗來一點一點證明這些觀點。
1. 函數是狗,哪裡呼叫哪裡哪,它就跟著你走
<?php
function php_cn(){
echo '我是一条狗';
}
php_cn();
php_cn();
php_cn();
?>php_cn這個函數,是不是顯示出來了三段:我是一隻狗?
2函數名稱只能是字母,數字,底線的組合,且之間不能包含空格,數字不能放在變數名稱首位。
<?php
function 1demo(){
}
?>以上程式碼會報錯誤。函數命名與變數命名
3. 函數名稱與變數命名規則一樣,但不同的是:函數名稱不區分大小寫
<?php
function Demo(){
echo '如果是写代码的男人,我们需要更加承担来自家庭的责任<br />';
}
demo();
Demo();
DEMO();
?>透過上面的程式碼會發現,會顯示出來三行:如果是寫程式碼的男我人我們需要更承擔來自家庭的責任
。
也就是函數名稱在呼叫的時候不區分大小寫。函數可以重複叫它的名字,可以重複執行。也體現了重用的特質。
4. 函數體的參數若是定義了,未傳參數,程式碼會報錯
<?php
//定义函数名为test,必须要传入一个参数
function test($hello){
}
test();
?>你也自己寫一段出來試試,會不會報錯?
5. 函數後的參數如果有預設值,參數可以不填,程式碼也不會報錯
<?php
function test( $arg = 10){
echo $arg;
}
test();
test(88);
?>是不是沒有報錯呀?並且顯示了 10和出來了。
說明,參數如果傳了,參數會帶入函數中。如果函數沒有傳參數,會用參數後的預設值。
6. 函數後的參數可以寫多個
<?php
function test( $a , $b = 20 , $c = 30){
echo $a + $b + $c;
}
test( 1 , 2 , 3 );
?>自己寫寫上面的程式碼,我們是不是傳入了多個參數?
7.函數後面如果有預設值和無預設值的參數,通常把無預設值的參數寫在最前面
之前的第3和第4個實驗我們發現:預設值是代表這個參數可以不用傳值進去。而沒有預設值的話,程式碼會報錯,也就是無預設值的參數是必傳的。我們來看看下面的範例:
<?php
function test( $a = 20 , $b = 30 , $c ){
echo $a + $b + $c;
}
//重点:重点看这一行执行一下
test( , , 8 );
?>透過上例發現執行上面的程式碼又報錯了。也就是上面的文法是不行的。
上面的語法我們希望的是,參數$a和參數$b我們不會傳入任何值。參數$c是必須要傳進去的,我們傳了8。可是PHP的文法規定中不準許我們這麼寫。因此,我們換一種寫法,也能達到一樣的效果:
<?php
function test( $c , $a = 20 , $b = 30){
echo $a + $b + $c;
}
//重点:重点看这一行执行一下
test( 8 );
?>透過上例實驗大家是不是發現,參數$c我傳了,程式碼還沒報錯。而參數$a = 20 ,參數 $b = 30 一樣帶入了代碼 $a + $b + $c 了。
8. 函數體的變數與函數體外的變數沒有關係
<?php
//定义变量$hello的值为10
$hello = 10;
//函数后的参数(形式上的参数,参数)处写上变量名为$hello
function demo( $hello ){
//形参带入了函数体内,函数体内变量$hello 改为了 250
$hello = 250;
//输入2个250相加的结果
echo $hello + $hello;
}
//将函数体外的变量$hello,传入变量的参数处(实际传入的参数,实参),显示出的结果为500
demo($hello);
//此处$hello的值输出,依然为10
echo $hello;
?>透過上例發現:形參、與實參沒有變點關係。而函數體內的傳進去的形參,再怎麼變化,都不會影響實參$hello的實際結果。
9. 函數體內若有return,return 後的程式碼不執行
<?php
function demo(){
echo 111;
return;
echo 222;
}
demo();
?>發現沒? ——只輸出了111。
10. 函數執行完後,return 可把函數體內的值,帶帶函數體外
<?php
//定义一条函数狗
function php_cn(){
$foo = 5;
$bar = 6;
$result = $foo + $bar;
//将$result的结果进行返回
return $result;
}
//调用php_cn()这个函数,$foo和$bar相加的$result就会返回回来给到变量$piao
$piao = php_cn();
//输出$piao的结果,果真为11
echo $piao;
?>11. 函數的執行沒有順序關係,可以在定義處之前的位置呼叫
<?php
demo();
function demo(){
$str = '爸爸妈妈年龄越来越大';
$str .= '大多数的孩子都是独生子女,更加应该负起责任';
echo $str;
}
demo();
?>透過上例發現,函數在定義之前還是在定義之後都可以呼叫。也就是函數可以任意位置呼叫。
11. 函數不能重載
<?php
function demo(){
}
function demo(){
}
//试试会报错吗?
?>透過上例發現,報錯了,也就是同名函數不能被定義兩次,否則報錯
作業:
1.定義一個雙層循環,隔行變色的表格
2.要求這個表格,預設值為10和10,顏色中有一個為預設參數,一個沒有預設參數
3.將表格的字串return 回去
#

