一、函數(shù)概念
函數(shù)是用來(lái)完成某種特定任務(wù)的可重復(fù)使用的代碼塊;
函數(shù)可以使程序更具模塊化,擁有良好的結(jié)構(gòu);
函數(shù)定義后再程序中可以重復(fù)調(diào)用;
函數(shù)分為內(nèi)置函數(shù)和自定義函數(shù)。
二、函數(shù)分類
1、內(nèi)置函數(shù)
PHP系統(tǒng)提供了大量功能強(qiáng)大的函數(shù),幫助我們解決各種問(wèn)題;
2、創(chuàng)建自定義函數(shù)
function function_name(parameters) {
//function body
}
function sayhello(){
echo "hello";
}
sayhello();
三、函數(shù)簡(jiǎn)介
函數(shù)用function關(guān)鍵字來(lái)聲明;
函數(shù)名稱是由字母或下劃線開(kāi)始,中間可以包含數(shù)字;
函數(shù)名不區(qū)分大小寫(xiě),不過(guò)在調(diào)用函數(shù)的時(shí)候,通常使用其在定義時(shí)相同的形式;
php不支持函數(shù)重載,所以自定義函數(shù)不能和內(nèi)置函數(shù)重名;
不能再一個(gè)文件中自定義同名的函數(shù);
參數(shù)出現(xiàn)在括號(hào)中,如果有多個(gè)參數(shù)用逗號(hào)隔開(kāi);
函數(shù)調(diào)用時(shí)只需在函數(shù)名后緊跟小括號(hào)即可。
四、函數(shù)的區(qū)別
注意不同語(yǔ)言的區(qū)別:
在java等強(qiáng)類語(yǔ)言中方法的名字嚴(yán)格區(qū)分大小寫(xiě);
C語(yǔ)言中的函數(shù)也是嚴(yán)格區(qū)分大小寫(xiě);
但PHP到現(xiàn)在的版本,函數(shù)名稱不區(qū)分大小寫(xiě);
很多語(yǔ)言允許函數(shù)(方法)的重載,即函數(shù)有相同的名稱但是函數(shù)參數(shù)不同;
PHP不支持函數(shù)的重載;
五、參數(shù)傳遞
- 值傳遞(傳值):
函數(shù)內(nèi)對(duì)參數(shù)的改變不會(huì)影響函數(shù)外部的值;
- 引用傳遞(傳址)
有些情況下,可能希望在函數(shù)體內(nèi)對(duì)參數(shù)的修改在函數(shù)體外也能反映;
使用引用傳遞參數(shù)要在參數(shù)前加上&符號(hào);
變量本身傳入,傳入后的變量與原變量建立聯(lián)系;
函數(shù)體內(nèi)變量的變化,會(huì)影響到原變量本身;
function sum(&$a, &$b) {
$a *= 2;
$b *= 2;
return $a * $b;
};
$x = 10;
$y = 20;
echo sum($x, $y);
echo "<br/>";
echo '$x = '.$x."<br/>".'$y = '.$y;
默認(rèn)參數(shù)值:可以為參數(shù)指定默認(rèn)值,在沒(méi)有提供其他值得情況下,則將默認(rèn)值自動(dòng)賦給該參數(shù);
可選參數(shù):可以指定某個(gè)參數(shù)為可選參數(shù),這些參數(shù)需要放在參數(shù)列表的末尾,且需要指定其默認(rèn)值為空;如果指定了多個(gè)可選參數(shù),可以選擇性的傳遞某些參數(shù)。
function add ($a, $b, $c = 1) {
return $a + $b + $c;
};
echo add(1,1);
如上代碼,如果我們不給$c傳遞參數(shù)它會(huì)默認(rèn)使用1做為參數(shù),而且需要注意的是函數(shù)如果有參數(shù),調(diào)用的時(shí)候不傳參數(shù)會(huì)報(bào)錯(cuò)。
六、返回值
通常情況下,只依靠函數(shù)做某些事情還不夠;需要將函數(shù)的執(zhí)行結(jié)果返回給調(diào)用者,這時(shí)可以使用return語(yǔ)句返回結(jié)果;
return語(yǔ)句執(zhí)行后,將使得函數(shù)立即結(jié)束運(yùn)行,并且將控制權(quán)返回被調(diào)用的行例如上面的add()函數(shù)。
七、變量作用域和生命周期
由于引入了函數(shù),程序中變量的能見(jiàn)度發(fā)生了變化,即變量的作用范圍發(fā)生了改變;
變量分為:全局變量、局部變量、靜態(tài)變量;
局部變量:函數(shù)體內(nèi)定義的變量為局部變量,只在函數(shù)體內(nèi)可見(jiàn);
局部變量的作用域:從聲明它的那條語(yǔ)句開(kāi)始到函數(shù)結(jié)束;
- 定義全局變量
$count = 10;
function test(){
// 在函數(shù)內(nèi)部想要使用函數(shù)外部的變量,需要使用global重新修飾一下
global $count;
$count = 100;
echo $count."<br/>";
}
test();
echo $count;
正常情況下我們輸出$count在函數(shù)內(nèi)部的值是100,函數(shù)外部的值為10,但是我們加上global關(guān)鍵字結(jié)果就不一樣了。
global的作用是定義全局變量,但是這個(gè)全局變量不是應(yīng)用于整個(gè)網(wǎng)站,而是應(yīng)用于當(dāng)前頁(yè)面,包括include或require的所有文件。 在函數(shù)體內(nèi)定義的global變量,函數(shù)體外可以使用,在函數(shù)體外定義的global變量不能在函數(shù)體內(nèi)使用。
- 定義靜態(tài)變量
靜態(tài)變量?jī)H在局部函數(shù)域中存在且只被初始化一次,當(dāng)程序執(zhí)行離開(kāi)此作用域時(shí),其值不會(huì)消失,會(huì)使用上次執(zhí)行的結(jié)果。
// 靜態(tài)變量
function add() {
// 使用static修改的變量為靜態(tài)變量,特點(diǎn)是:只被初始化一次
static $count = 0;
$count++;
echo "<hr>". $count;
}
add();
add();
add();
八、include和require
1、include
include語(yǔ)句將在其被調(diào)用的位置處包含一個(gè)文件,只執(zhí)行一次。
2、include_once
include_once的作用與include相同,不過(guò)它會(huì)首先驗(yàn)證是否已經(jīng)包含了該文件,如果已經(jīng)包含,則不再執(zhí)行include_once,可多次執(zhí)行;
3、require與include一樣,只不過(guò)require我們通常放在php程序的最前面;
4、require_once與include_once一樣,但是也要放在PHP程序的最前面;
5、include和require的區(qū)別
require一個(gè)文件存在錯(cuò)誤的話,那么程序就會(huì)中斷執(zhí)行了,并顯示致命錯(cuò)誤;
include一個(gè)文件存在錯(cuò)誤的話,那么程序不會(huì)中斷,而是繼續(xù)執(zhí)行,并顯示一個(gè)警告錯(cuò)誤。
include "index.php";
include_once "index.php";
require "index.php";
require_once "index.php";
以上內(nèi)容純屬個(gè)人理解,由于本人水平有限若有錯(cuò)漏之處,敬請(qǐng)諒解。