一、函數
一部分可重復執行的代碼段,多次執行,一次編譯
特點:
1.減少程序運行的復雜性
2.提高程序的可靠性
3.提高函數的開發效率
4.提高程序的維護性
5.提高程序的重復性
語法
1.帶參數的函數
function fun(參數1,參數2){
}
function sayName($name,$age,$city){
echo "你的名字:<span style='color:#f00 '></span>".$name.',你的年齡:'.$age.'你所在的城市:'.$city;
}
sayName('張三',18,'北京');
帶返回值的函數
2.帶返回值的函數
function fun(參數1,參數2){
return
}
檢測函數是否存在:
function_exists(函數名);
function fun($a,$b){
return $a+$b;
}
echo fun(3,5);
檢測一個函數是否存在
function_exists(‘函數名’);
使用var_dump();輸出,會得到一個布爾類型的值,true或false
var_dump(function_exists('fun'));
二、函數的作用域
$bbs='百度';
function fn1(){
echo $bbs;
}
fn();//會報undefined
在函數內是訪問不到函數外的變量的
function fn(){
$bbs='www.baidu.com';
}
fn();
echo $bbs;
在函數外也是訪問不到函數內的變量的
如果我們現在想訪問函數內的變量,這時候就需要借助關鍵詞global了
global關鍵詞用于訪問函數內的全局變量
$bbs='百度';
function fn3(){
global $bbs;
$bbs='www.baidu.com';
echo '函數內'.$bbs;//www.baidu.com
}
fn3();
echo '函數外'.$bbs;//www.baidu.com
卸載一個函數
$bbs='百度';
function fn3(){
global $bbs;
$bbs='www.baidu.com';
unset($bbs);//卸載一個函數
echo '函數內'.$bbs;
}
fn3();
echo '函數外'.$bbs;//www.baidu.com
即使把函數卸載了我們發現在函數外輸出的熱然是 'www.baidu.com'
靜態變量 static:
作用:
1.是在所有對函數調用中共享
2.只有在第一次調用時賦值
function fn(){
$i=1;
$i++;
echo $i;
}
fn();//2
fn();//2
fn();//2
fn();//2
fn();//2
我們發現反復調用函數,輸出的都是2
如果我們想輸出2,3,4,5那么我們就需要做如下改變
function fn(){
static $i=1;
$i++;
echo $i.'<br>';
}
fn();
fn();
fn();
fn();
fn();
三、按值傳遞與按址傳遞
按值傳遞
function eat($name){
$name=$name.'女士';
echo $name.'在吃飯<br>';
}
$name='小張';
eat($name);
echo $name;
按址傳遞
function eat(&$name){
$name=$name.'女士';
echo $name.'在吃飯<br>';
}
$name='小張';
eat($name);
echo $name;
四、在函數中傳遞多個參數
func_get_args();//接收一個參數,包含數組中的所有參數
func_num_args;取得共有幾個參數
func_get_arg(整數);//獲得第幾個
參數,序號是從0開始
function stu_name(){
$arr=func_get_args();
//便利
foreach($arr as $key=>$value){
echo '學生{$key}的名字是:'$value.'<br>';
echo '一共有'.func_num_args().'名學生';
echo '第三個學生是'.func_get_arg(2);
}
}
stu_name('張三','李四','王五','趙六','周期','楊八','李九');
五、遞歸調用
遞歸:在函數體內調用自己,遞歸調用應該加上一個停止調用的函數,否則會陷入死循環
求階乘:
function jc($i){
if($i>1){
$s=$j*jc($i-1);
}else{
$s=1
}
return $s;
}
echo jc(3);