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 回去

#    

繼續學習
||
<?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; ?>