函數(shù)的定義:函數(shù)就是一段封裝好的代碼塊,可以隨時(shí)調(diào)用。在PHP中有兩種函數(shù):自定義函數(shù)與系統(tǒng)函數(shù)。
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的臥龍網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!自定義函數(shù)語(yǔ)法格式:
function 函數(shù)名稱(chēng)([參數(shù)1,[參數(shù)2]....])
{
函數(shù)體(程序內(nèi)容敘述)
[return 返回值;]
}
注:[]里的東西可有可無(wú)
自定義函數(shù)的名稱(chēng):
它是函數(shù)在程序代碼中的識(shí)別名稱(chēng),函數(shù)名可以是以字母或下劃線開(kāi)頭后跟零個(gè)或多個(gè)字母、下劃線和數(shù)字的任何字符串。
符合變量名的命名規(guī)則
函數(shù)名不區(qū)分大小寫(xiě)。
函數(shù)名不能重復(fù),命名函數(shù)函數(shù)時(shí)不可使用已經(jīng)聲明的函數(shù)(這個(gè)和變量的命名不同,變量可以覆蓋前一個(gè)變量名,而函數(shù)不可以),和PHP系統(tǒng)函數(shù)名稱(chēng)。
函數(shù)名稱(chēng)和變量名稱(chēng)的區(qū)別:
變量名嚴(yán)格區(qū)分大小寫(xiě),函數(shù)名不區(qū)分大小寫(xiě)。
參數(shù)(可以分為形參和實(shí)參):
所謂參數(shù)就是:用來(lái)把數(shù)值從函數(shù)外部傳入函數(shù)體中,并用來(lái)加以運(yùn)算處理。
參數(shù)之間用“,”隔開(kāi),當(dāng)函數(shù)不需要任何數(shù)值傳入時(shí),可以省略參數(shù)。
形參:聲明函數(shù)時(shí),函數(shù)名后面括號(hào)內(nèi)的表達(dá)式稱(chēng)為形參。
function table(形參1,形參2){}
實(shí)參:被調(diào)用函數(shù)名后面括號(hào)中的表達(dá)式稱(chēng)為實(shí)參。
table(實(shí)參1,實(shí)參2);
實(shí)參和形參需要按順序?qū)?yīng)傳遞數(shù)據(jù)。
注意:函數(shù)參數(shù)中,沒(méi)有默認(rèn)值的放到前面,有默認(rèn)值的放在參數(shù)列表中的后邊。 返回值: 當(dāng)調(diào)用函數(shù)時(shí)需要它返回一些數(shù)值,那么就要在函數(shù)體中用return語(yǔ)句實(shí)現(xiàn)。 格式如下: return 返回值;//返回值可以是變量也可以是一個(gè)表達(dá)式 exit(); //無(wú)返回值 void return語(yǔ)句在函數(shù)體中使用時(shí),有以下兩個(gè)作用: return語(yǔ)句可以向函數(shù)調(diào)用者返回函數(shù)體中任意確定的值。 將程序控制權(quán)返回到調(diào)用者的作用域,即退出函數(shù)。在函數(shù)中如果執(zhí)行了return語(yǔ)句,它后面的語(yǔ)句就不會(huì)被執(zhí)行了。 說(shuō)明:如果函數(shù)沒(méi)有返回值,就只能算是一個(gè)執(zhí)行過(guò)程,只依靠函數(shù)做一些事情還不夠,有時(shí)更需要在程序腳本中 使用函數(shù)執(zhí)行后的結(jié)果。由于變量的作用域的差異,調(diào)用函數(shù)的腳本程序不能直接使用函數(shù)體里面的信息,但可以通過(guò)關(guān)鍵字return向調(diào)用者傳遞數(shù)據(jù)。 echo與return: echo直接輸出到瀏覽器,不能再加工,不能賦值給變量 return可以賦值給變量,變量是數(shù)據(jù)的臨時(shí)容器(return返回一個(gè)值,等待一個(gè)變量接收它) 注意: 如果函數(shù)有返回值,當(dāng)函數(shù)執(zhí)行完畢時(shí)就會(huì)將return后面的值返回到調(diào)用函數(shù)的位置處,這樣就可以把函數(shù)名稱(chēng)當(dāng)作函數(shù)返回的值使用。(這時(shí)調(diào)用函數(shù)時(shí)對(duì)ruturn后面的值是不管用的(retrun的值已經(jīng)返回到調(diào)用函數(shù)的位置處,return以前的輸出還是可以照樣輸出),因?yàn)樗呀?jīng)變成某個(gè)值了無(wú)法用funName();輸出,需要echo funName()才可以輸出。) 輸出結(jié)果: cccaaa ccc cccaaa cccaaa 函數(shù)的調(diào)用: 格式:函數(shù)名(); 說(shuō)明:table(); 不管是自定義函數(shù)還是系統(tǒng)函數(shù),如果函數(shù)不被調(diào)用,就不會(huì)執(zhí)行。 通過(guò)函數(shù)名稱(chēng)去調(diào)用函數(shù),并讓函數(shù)體的代碼運(yùn)行,調(diào)用幾次函數(shù)體就會(huì)執(zhí)行幾次。 在PHP中可以在函數(shù)的聲明之后調(diào)用,也可以在函數(shù)的聲明之前調(diào)用,還可以在函數(shù)中調(diào)用函數(shù)。 駝峰命名法: 判斷函數(shù)是否存在: function_exists() PHP變量的范圍: 局部變量 全局變量 靜態(tài)變量 在PHP的頁(yè)面中聲明的變量,叫“全局變量”. 函數(shù)內(nèi)的變量叫“局部變量”. 二者沒(méi)有半毛錢(qián)關(guān)系:函數(shù)內(nèi)的變量,外部無(wú)法調(diào)用,函數(shù)外的變量,函數(shù)無(wú)法調(diào)用 (某戲班子到某學(xué)校唱戲,兩者的花名冊(cè)都不可相互調(diào)用) 靜態(tài)變量: PHP支持聲明函數(shù)變量為靜態(tài)的(static)。 一個(gè)靜態(tài)變量在所有對(duì)該函數(shù)的調(diào)用之間共享,并且僅在腳本的執(zhí)行期間函數(shù)第一次被調(diào)用時(shí)被初始化。 要聲明函數(shù)變量為靜態(tài)的用關(guān)鍵字static,通常,靜態(tài)變量的第一次使用時(shí)賦予一個(gè)初始值。 函數(shù)內(nèi)如何調(diào)用函數(shù)外的變量? 1、傳參 2、引用傳參---"&" 下邊的兩種方法不推薦使用,因?yàn)槠淦茐牧撕瘮?shù)的封裝性 3、聲明全局變量 global 4、超級(jí)全局變量,在頁(yè)面的任何部分,包括函數(shù),方法等,都可以直接訪問(wèn) $GLOBALS 超級(jí)全局變量(9個(gè)): $_GET //地址欄上獲得的值 $_POST //POST表單發(fā)送的數(shù)據(jù) $_REQUEST //既有GET,也有POST的內(nèi)容,需要在php.ini中配置 $_SESSION $_COOKIE $_FILES $_ENV //服務(wù)器操作系統(tǒng)的環(huán)境變量,如操作系統(tǒng),Linux,win ,mac,環(huán)境變量等等;容易暴露服務(wù)器信息,一般不允許顯示,需要在php.ini中配置 $_SERVER //獲取網(wǎng)站的域名,以及當(dāng)前訪問(wèn)的腳本,客戶(hù)端IP(REMOTE_ADDR,HTTP_X_FORWARD_FOR) $GLOBALS //是對(duì)全局變量花名冊(cè)的一個(gè)別名,通過(guò)該變量,可以任意訪問(wèn)全局變量 搜索如果禁用了$_ENV變量,還有什么辦法獲取環(huán)境信息? PHP函數(shù)的各種形式(分類(lèi)): 常規(guī)參數(shù)函數(shù) 偽類(lèi)型參數(shù)函數(shù) mixed number callable | callback 默認(rèn)參數(shù)函數(shù) function table($rows,$cols=3,$color= 'red'); 可變長(zhǎng)度參數(shù)函數(shù) func_get_args() func_get_arg(1) func_num_args(); 引用參數(shù)函數(shù) function mysort(&$arr){}; 回調(diào)函數(shù) usort(), uksort(), 遞歸函數(shù) 匿名函數(shù) 1、常規(guī)參數(shù)函數(shù) 格式說(shuō)明: 所謂的常規(guī)參數(shù)函數(shù)就是實(shí)參和形參應(yīng)該個(gè)數(shù)相等,類(lèi)型一致。 2、偽類(lèi)型參數(shù)函數(shù) 主要用于查看手冊(cè)時(shí),查看各種需要的類(lèi)型,在實(shí)際的代碼中很少用到,有這么概念就行,偽類(lèi)型可以理解為什么類(lèi)型都可以。 格式說(shuō)明: PHP中函數(shù)的每個(gè)參數(shù),都可以為其傳遞任意類(lèi)型的值。 PHP的偽類(lèi)型,包括mixed(任意類(lèi)型)、number(int ,float)、callback(函數(shù)名)三種。 3、默認(rèn)參數(shù)函數(shù) 格式說(shuō)明:mixed funName(string name[,string value[,int expire]]) #在參數(shù)列表中出現(xiàn)使用[ ]描述的參數(shù) 4、可變長(zhǎng)度參數(shù)函數(shù) 格式說(shuō)明: mixed funName(string arg1 [,string...]) #在參數(shù)列表中出現(xiàn)使用“...”描述的參數(shù) 使用默認(rèn)參數(shù)函數(shù)適合實(shí)參個(gè)數(shù)少于形參的情況,而可變長(zhǎng)度參數(shù)函數(shù)則適合實(shí)參個(gè)數(shù)多于形參的情況。 如果希望函數(shù)可以接受任意數(shù)量的參數(shù),需要在函數(shù)中使用PHP系統(tǒng)提供的func_get_args()函數(shù),它將所有傳遞個(gè)腳本函數(shù)的參數(shù)當(dāng)作一個(gè)數(shù)組返回。 獲取所有傳入的參數(shù):func_get_args(); 獲取所有傳入?yún)?shù)的個(gè)數(shù): func_num_args(); 單獨(dú)獲取指定的參數(shù): func_get_arg(n); print_r($arr); 5、引用參數(shù)函數(shù) 格式說(shuō)明:void funName(array &arg) #在參數(shù)列表中出現(xiàn)使用 & 描述的函數(shù) 6、回調(diào)參數(shù)函數(shù) 格式說(shuō)明: 所謂回調(diào)函數(shù),就是指調(diào)用函數(shù)時(shí)并不是傳遞一個(gè)標(biāo)準(zhǔn)的變量作為參數(shù),而是將另一個(gè)函數(shù)作為參數(shù)傳遞到調(diào)用的函數(shù)中。 函數(shù)參數(shù)中,有一個(gè)參數(shù)值是另一個(gè)函數(shù)的函數(shù)名,那么這個(gè)函數(shù)就是回調(diào)函數(shù) 如果在函數(shù)的格式說(shuō)明中,出現(xiàn)“callback”類(lèi)型的參數(shù),該函數(shù)就是回調(diào)函數(shù)。 callback也屬于PHP中偽類(lèi)型的一種,說(shuō)明函數(shù)的參數(shù)需要接受另一個(gè)函數(shù)作為實(shí)參。 使用回調(diào)函數(shù)的目的是可以將一段自己定義的功能傳到函數(shù)內(nèi)部使用。 變量函數(shù) 變量函數(shù)也稱(chēng)為可變函數(shù)。如果一個(gè)變量名后有圓括號(hào),PHP將尋找與變量的值同名的函數(shù),并且將嘗試執(zhí)行它。 2使用變量函數(shù)聲明和應(yīng)用回調(diào)函數(shù) 3借助call_user_func_array()函數(shù)自定義回調(diào)函數(shù) 格式說(shuō)明:mixed call_user_func_array(callback function,array param_arr) 該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)因?yàn)槭褂脗晤?lèi)型callback,所以這個(gè)參數(shù)需要是一個(gè)字符串,表示要調(diào)用的函數(shù)名,第二個(gè)參數(shù)則是一個(gè)數(shù)組類(lèi)型參數(shù),表示參數(shù)列表,按照順序依次會(huì)傳遞給要調(diào)用的函數(shù)。 4靜態(tài)類(lèi)函數(shù)和對(duì)象的方法回調(diào) 7、遞歸函數(shù) 遞歸函數(shù)即自調(diào)用函數(shù)。 8、匿名函數(shù) 1、它沒(méi)有函數(shù)名 2,可以賦值給一個(gè)變量 $bianliang = function(參數(shù))use(變量){//函數(shù)體}; 3,所有回調(diào)函數(shù)中,回調(diào)參數(shù)位置都可以用匿名函數(shù)替代。 4,可以使用use直接調(diào)用外部的變量($arr),如果引用外部變量(&$arr),在內(nèi)部可以更改外部的變量值 使用自定義函數(shù)庫(kù): include(); require(); include(); require(); 語(yǔ)句是語(yǔ)言結(jié)構(gòu),不是真正的函數(shù) inculde_once(); require_once(); 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。function table2($rows,$cols,$color='yellow')
{
echo '';
for($i = 0;$i < $rows;$i++){
echo ''; ';
for($n = 0;$n <$cols;$n++){
echo ''.($i*$rows+$n).' ';
}
echo '
}
}
table2(10,10,'red');table2($rows,$cols,$color = 'yellow')
header("content-type:text/html;charset=utf-8");
//在函數(shù)的聲明之前調(diào)用
echo show();
echo '
';
function show()
{
echo 'ccc'; return 'aaa';
//return所在行之后的代碼不會(huì)執(zhí)行
echo 111;
}
//函數(shù)的調(diào)用,不會(huì)將return后面的值返回
show();
echo '
';
//return返回的值 需要一個(gè)變量來(lái)接收它
$result = show();
echo $result;
echo '
';
//也可以直接輸出 函數(shù)名稱(chēng)
echo show();
echo '
';function showInfo()
{
}
function ShowInfo()
{
}if(function_exists('table')){
echo 'table';
}else{
echo 'table函數(shù)不存在,請(qǐng)先定義table函數(shù)';
}$username = 'shifang';
function stu()
{
$name = 'libai';
echo $name; //無(wú)法調(diào)用外部的$username,而在函數(shù)體內(nèi)也沒(méi)有聲明$username
10 echo $username;
echo 'xxxx';
}
stu();//函數(shù)體外無(wú)法調(diào)用函數(shù)體內(nèi)的變量
16.echo $name;
echo $username;結(jié)果:
libai
Notice: Undefined variable: username in D:\xampp\htdocs\89\Exercise\2014-7-28 PHP function\007quanju.php on line 10
xxxx
Notice: Undefined variable: name in D:\xampp\htdocs\89\Exercise\2014-7-28 PHP function\007quanju.php on line 16
shifangfunction tongji()
{
static $n = 0;
echo $n;
$n++;
}
tongji();
tongji();
tongji();
echo '
';
function jishu()
{
$m = 0;
echo $m;
$m++;
}
jishu();
jishu();
jishu();
輸出結(jié)果:
012300000
function t2()
{
global $a;
echo $a;
}
t2();
//使用return
function show()
{
$username = 'dufu';
return $username;
}
//輸出dufu
echo show();
echo '
';
$username = 'xiao';
echo $username;
echo '
';
function getData(){
return $GLOBALS['username'] = 'libai';
}
//無(wú)法輸出
getData();
echo '
';
$result = getData();
echo $result;
echo '
';
echo getData();
echo '
';
//超全局變量,不僅可以獲取外邊的變量,還可以改變變量的值
echo $username;
echo '
';輸出結(jié)果:
dufu
xiaolibailibailibai
string example(string name, int age, double height)
{function table2($rows,$cols,$color="yellow")
echo '';
for($i = 0;$i < $rows;$i++){
echo ''; ';
for($n = 0;$n <$cols;$n++){
echo ''.($i*$rows+$n).' ';
}
echo '
}
}
table2(10,10,'red');mixed funName(mixed $args) #在參數(shù)列表中出現(xiàn)類(lèi)型使用 mixed 描述的參數(shù)
number funName(number $args) #在參數(shù)列表中出現(xiàn)類(lèi)型使用 number 描述的參數(shù)
//一個(gè)函數(shù):只要有一個(gè)參數(shù)有默認(rèn)值,該函數(shù)就叫默認(rèn)參數(shù)函數(shù)
//默認(rèn)參數(shù):有默認(rèn)值的參數(shù)放在 參數(shù)列表 后面,前面的 形參個(gè)數(shù) 要求與 傳入實(shí)參 時(shí)的 個(gè)數(shù)和類(lèi)型必須一致
function table($rows = 10,$cols = 10,$color = 'red')
{
echo '';
';
for($i = 0; $i < $rows; $i++){
echo ''; ';
for($n = 0; $n < $cols; $n++){
echo ''.($i*$cols+$n).' ';
}
echo '
}
echo '
}
table(3,3,'blue');
table();
//可變長(zhǎng)度參數(shù)函數(shù):傳入的參數(shù)個(gè)數(shù)是不確定的
function show()
{
//獲取所有傳入的參數(shù),并將其轉(zhuǎn)為一個(gè)數(shù)組返回
$arr = func_get_args();//輸出的$arr為數(shù)組
//獲取所有傳入?yún)?shù)的個(gè)數(shù)
echo func_num_args();
//單獨(dú)獲取指定的參數(shù),需要傳入?yún)?shù)的順序號(hào),從0開(kāi)始
echo func_get_arg(3);
}
show('a','n','x','y','z');
function getInfo(){
$num = func_num_args();
for($i = 0;$i < $num;$i++){
echo func_get_arg($i).'
';
}
}
getInfo('姓名:小二','年齡:18','aihao:nvkeguan','teshuaihao:hejiu');輸出結(jié)果:
5
Array ( [0] => a [1] => n [2] => x [3] => y [4] => z )
y
姓名:小二
年齡:18
aihao:nvkeguan
teshuaihao:hejiu
$arr = array(98,66,1,23,12,5);echo '
';
print_r($arr);function show(&$crr){
for($i = 0;$i <4; $i++){
($crr[$i] += 5).'
';
}
}
//$crr = &$arr;$arr是數(shù)組所以無(wú)法輸出數(shù)組?
show($arr);
echo '';
print_r($arr);
echo '
';
echo '';
sort($arr);
print_r($arr);輸出結(jié)果:
Array
(
[0] => 98
[1] => 66
[2] => 1
[3] => 23
[4] => 12
[5] => 5
)
Array
(
[0] => 103
[1] => 71
[2] => 6
[3] => 28
[4] => 12
[5] => 5
)
Array
(
[0] => 5
[1] => 6
[2] => 12
[3] => 28
[4] => 71
[5] => 103
)
$var=100;
function testi($arg)
{
//局部變量無(wú)法使用全局變量,報(bào)錯(cuò)
echo $var;
echo '
';
//傳參$var=100
echo $arg;
echo '
';
//改變局部變量的值,輸出200
$arg=200;
echo $arg;
}
testi($var);
//改變局部變量的值,不會(huì)影響全局變量
echo $var;
echo '
';
function test(&$arg)
{
//局部變量無(wú)法使用全局變量,報(bào)錯(cuò)
echo $var;
echo '
';
//傳參
echo $arg;
echo '
';
//改變局部變量的值,輸出200
$arg=200;
echo $arg;
}
test($var);
//改變局部變量,全局變量的值也被改變200
echo $var;輸出結(jié)果:
Notice: Undefined variable: var in D:\xampp\htdocs\89\HomeWork\moxie\yinyon.php on line 7
100
200100
Notice: Undefined variable: var in D:\xampp\htdocs\89\HomeWork\moxie\yinyon.php on line 28
100
200200mixed funName( callback arg ) #在參數(shù)列表中使用偽類(lèi)型 callback 描述
function fun($msg1,$msg2){
echo '$msg1='.$msg1.'
';
echo '$msg12='.$msg2;
}
call_user_func_array('fun',array('lamp','兄弟連'));結(jié)果:
$msg1=lamp
$msg12=兄弟連echo '
';
$arr = [199,1,24,789,213,123];
usort($arr,'myfun');
function myfun($x,$y){
return $y-$x;
}
print_r($arr);
結(jié)果:
Array
(
[0] => 789
[1] => 213
[2] => 199
[3] => 123
[4] => 24
[5] => 1
)$bianliang = 'myfun';
function myfun()
{
echo 'this is a function';
}
// myfun();
//$bianliang();
//自定義的回調(diào)函數(shù)
function show($func){
//myfun();
$func();
}
show('myfun');
結(jié)果:this is a function$n = 10;
function jianfa($x){
//執(zhí)行遞減
$x--;
//輸出傳入的參數(shù)值
echo $x;
//如果$a大于零就繼續(xù)調(diào)用函數(shù)本身
if($x > 0){
jianfa($x);
}else{
//如果不大于0就輸出字符串
echo '<=====>';
}
//輸出$a的值
echo $x;
}
jianfa($n);結(jié)果:
9876543210<=======>0123456789
//1,第一種用法:將匿名函數(shù)數(shù)賦值給一個(gè)變量,調(diào)用的時(shí)候 $變量名(參數(shù)..);
$show = function($a){
echo '代碼的處理';
echo $a;
};
$n = 15;
$show($n);$color = 'red';
$table = function($rows,$cols)use(&$color){
$color = 'green';
echo '';
';
for($i = 0;$i < $rows;$i++){
echo ''; ';
for($n = 0;$n < $cols;$n++){
echo ''.($i*$cols+$n).' ';
}
echo '
}
echo '
};
$table(10,10);
echo $color;結(jié)果:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 green
&符,將內(nèi)部的變量值把外部的變量改變
//包含文件到當(dāng)前的位置。而 include 只產(chǎn)生警告(E_WARNING),腳本會(huì)繼續(xù)運(yùn)行。
include '04table.php';
//包含文件到當(dāng)前的位置。require 在出錯(cuò)時(shí)產(chǎn)生 E_COMPILE_ERROR 級(jí)別的錯(cuò)誤。
require('04table.php');
echo table(5,5);
分享文章:PHP的函數(shù)應(yīng)用-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/ddpocd.html
其他資訊