一畅哑、函數(shù)的聲明
- 語法:
function 函數(shù)名([arg1][,arg2]...[,argN]){
.....函數(shù)體功能代碼段...
return 返回值; //沒有返回值則為NULL
}
-
參數(shù):
- 按值傳參
- 引用傳參
栗子:
$a=10;
$b=11;
//按值傳參
function f1($a=2,$b=3){
$a=$a+1;
$b=$b+1;
echo $a.','.$b.'</br>';
}
/*按值穿參仇轻,不會改變外部變量*/
f1($a,$b); //11,12
echo $a.','.$b.'</br>'; //10,11
f1($a,$b); //11,12
//用&方式,表示引用傳參
function f2($a=3,&$b=4){
$a=$a+1;
$b=$b+1;
echo $a.','.$b.'</br>';
}
/*按值穿參焦人,不會改變外部變量*/
f2($a,$b); //11,12
echo $a.','.$b.'</br>'; //10,12
f2($a,$b); //11,13
- 特點:
- 參數(shù)可以有默認值挥吵,默認值必須是常量表達式(標量類型),不能是諸如變量花椭,類成員忽匈,或者函數(shù)調(diào)用等
- php函數(shù)支持可變數(shù)量的參數(shù)列表
二、函數(shù)的特性
- 函數(shù)名命名與變量矿辽、常量命名規(guī)范相同
- 函數(shù)名不區(qū)分大小寫
- 函數(shù)名必須是唯一的
- 函數(shù)不會自己發(fā)揮作用丹允,只有在調(diào)用的時候才會執(zhí)行并發(fā)揮作用
- 函數(shù)可以有返回值郭厌,但只能有一個返回值,返回值可以是任何php支持的數(shù)據(jù)類型
- php支持可變函數(shù)雕蔽,他的實質(zhì)就是可變變量
三折柠、函數(shù)的動態(tài)調(diào)用(可變變量的實質(zhì))
/*函數(shù)動態(tài)調(diào)用*/
function t(){
return 'test';
}
$str="t";
echo $str(); // $str() 等價于 t()
/*可變變量*/
$h="hello";
$hello="hello world";
echo $$h; // $$h 等價于 $($h) 等價于 $hello 等價于 "hello world"
四、函數(shù)內(nèi)的局部變量
- 函數(shù)內(nèi)的變量有兩種萎羔,以下兩種變量僅在函數(shù)內(nèi)有效:
- 局部變量(local):函數(shù)內(nèi)部聲明的變量
- 局部靜態(tài)變量(static):函數(shù)內(nèi)部使用關鍵字static聲明的變量液走。靜態(tài)變量的值不能是表達式的值碳默,只能是標量值
- 變量知識補充:
- 全局變量(global):在全局聲明的變量贾陷,全局有效
- 變量的銷毀和檢測
- 栗子:
$a=10;
function f1($a=123){
echo $a; //123
$a++;
echo $a; //124
global $a; //指定函數(shù)內(nèi)變量使用的是全局變量
$a++;
echo $a; //11
}
echo $a; //10
f1();
echo $a; //11
function f2(){
$a=100; //普通局部變量在每次函數(shù)被調(diào)用時都會被初始化
static $num=100; //靜態(tài)局部變量,它的值只能是標量值嘱根,在函數(shù)首次被調(diào)用時被初始化
$a++;
$num++;
echo $a,$num;
}
/*靜態(tài)局部變量所做的靜態(tài)計數(shù)器*/
f2(); //101 101
f2(); //101 102
f2(); //101 103
五髓废、函數(shù)和業(yè)務代碼分離(包含文件)
- 函數(shù)抽離成單獨文件:
<?php
/*func.php文件*/
function test(){
echo 'testests';
}
- 四種引入方式:
- include:
- 如果引入文件有錯誤,代碼盡可能的往下執(zhí)行
<?php /*1.php文件*/ include 'func.php'; //實質(zhì)就是將func.php文件的代碼復制在次行 include 'func.php'; //如果重復引用則會報“函數(shù)重名錯誤”该抒,test函數(shù)有兩個
- require:如果引入文件有錯誤慌洪,代碼立即終止執(zhí)行
- include_once:
- 只會引入一次,如果在此之前已經(jīng)引用過則不會再次引入
<?php /*1.php文件*/ include_once 'func.php'; //include_once會檢測當前是否已經(jīng)包含這個文件 include_once 'func.php'; //已經(jīng)包含fun.php 所以此文件不會再被引入
- require_once
- include: