一扯饶、函數(shù)概念
函數(shù)是用來完成某種特定任務(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ù),幫助我們解決各種問題奴拦;
2媒鼓、創(chuàng)建自定義函數(shù)
function function_name(parameters) {
//function body
}
function sayhello(){
echo "hello";
}
sayhello();
三、函數(shù)簡介
函數(shù)用function關(guān)鍵字來聲明;
函數(shù)名稱是由字母或下劃線開始绿鸣,中間可以包含數(shù)字疚沐;
函數(shù)名不區(qū)分大小寫,不過在調(diào)用函數(shù)的時(shí)候潮模,通常使用其在定義時(shí)相同的形式亮蛔;
php不支持函數(shù)重載,所以自定義函數(shù)不能和內(nèi)置函數(shù)重名再登;
不能再一個(gè)文件中自定義同名的函數(shù)尔邓;
參數(shù)出現(xiàn)在括號中晾剖,如果有多個(gè)參數(shù)用逗號隔開锉矢;
函數(shù)調(diào)用時(shí)只需在函數(shù)名后緊跟小括號即可。
四齿尽、函數(shù)的區(qū)別
注意不同語言的區(qū)別:
在java等強(qiáng)類語言中方法的名字嚴(yán)格區(qū)分大小寫沽损;
C語言中的函數(shù)也是嚴(yán)格區(qū)分大小寫;
但PHP到現(xiàn)在的版本循头,函數(shù)名稱不區(qū)分大小寫绵估;
很多語言允許函數(shù)(方法)的重載,即函數(shù)有相同的名稱但是函數(shù)參數(shù)不同卡骂;
PHP不支持函數(shù)的重載国裳;
五、參數(shù)傳遞
- 值傳遞(傳值):
函數(shù)內(nèi)對參數(shù)的改變不會影響函數(shù)外部的值全跨;
- 引用傳遞(傳址)
有些情況下缝左,可能希望在函數(shù)體內(nèi)對參數(shù)的修改在函數(shù)體外也能反映;
使用引用傳遞參數(shù)要在參數(shù)前加上&符號浓若;
變量本身傳入渺杉,傳入后的變量與原變量建立聯(lián)系;
函數(shù)體內(nèi)變量的變化挪钓,會影響到原變量本身是越;
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)值,在沒有提供其他值得情況下碌上,則將默認(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ù)它會默認(rèn)使用1做為參數(shù),而且需要注意的是函數(shù)如果有參數(shù),調(diào)用的時(shí)候不傳參數(shù)會報(bào)錯(cuò)敷燎。
六暂筝、返回值
通常情況下,只依靠函數(shù)做某些事情還不夠硬贯;需要將函數(shù)的執(zhí)行結(jié)果返回給調(diào)用者焕襟,這時(shí)可以使用return語句返回結(jié)果;
return語句執(zhí)行后饭豹,將使得函數(shù)立即結(jié)束運(yùn)行鸵赖,并且將控制權(quán)返回被調(diào)用的行例如上面的add()函數(shù)。
七拄衰、變量作用域和生命周期
由于引入了函數(shù)它褪,程序中變量的能見度發(fā)生了變化,即變量的作用范圍發(fā)生了改變翘悉;
變量分為:全局變量茫打、局部變量、靜態(tài)變量妖混;
局部變量:函數(shù)體內(nèi)定義的變量為局部變量老赤,只在函數(shù)體內(nè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)前頁面,包括include或require的所有文件。 在函數(shù)體內(nèi)定義的global變量,函數(shù)體外可以使用,在函數(shù)體外定義的global變量不能在函數(shù)體內(nèi)使用荣堰。
- 定義靜態(tài)變量
靜態(tài)變量僅在局部函數(shù)域中存在且只被初始化一次,當(dāng)程序執(zhí)行離開此作用域時(shí)床未,其值不會消失,會使用上次執(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語句將在其被調(diào)用的位置處包含一個(gè)文件渡八,只執(zhí)行一次啃洋。
2、include_once
include_once的作用與include相同屎鳍,不過它會首先驗(yàn)證是否已經(jīng)包含了該文件宏娄,如果已經(jīng)包含,則不再執(zhí)行include_once逮壁,可多次執(zhí)行;
3孵坚、require與include一樣,只不過require我們通常放在php程序的最前面;
4卖宠、require_once與include_once一樣巍杈,但是也要放在PHP程序的最前面;
5扛伍、include和require的區(qū)別
require一個(gè)文件存在錯(cuò)誤的話筷畦,那么程序就會中斷執(zhí)行了,并顯示致命錯(cuò)誤刺洒;
include一個(gè)文件存在錯(cuò)誤的話鳖宾,那么程序不會中斷,而是繼續(xù)執(zhí)行逆航,并顯示一個(gè)警告錯(cuò)誤鼎文。
include "index.php";
include_once "index.php";
require "index.php";
require_once "index.php";
以上內(nèi)容純屬個(gè)人理解,由于本人水平有限若有錯(cuò)漏之處纸泡,敬請諒解漂问。