第四章 php函式(自定義函式、變數範圍、引數傳遞,可變函式、遞迴函式、內建函式)
任何有效的php程式碼都可以作為函式體使用
//例子1
function add($a,$b){
echo $a+$b;
}
add(10,20); //php頁面顯示30
// 例子2
function add($a,$b){
return $a+$b; //return功能: 返回值給呼叫的地方,結束這個函式的執行
}
add(10,20); //php頁面什麼都不顯示,因為不是echo輸出
檢視一個變數的型別和值的方法:var_dump(add(10,20)); //這次檢視 這個函式值的資料型別和值是多少
自定義函式
function 函式名(形式引數1,形參2...形參n){ ... }
<?php
$i=10; //全域性變數
function test(){
global $i; //php中要用全域性變數先要宣告一下
echo $i;
$a=1;
}
test();
?>
//函式內部有echo也沒法在顯示輸出內容,必須要呼叫這個函式才能輸出函式內部內容
定義常量: define('MY_NAME', 'ROBIN.FANG'); //後面必須加分號
echo MY_NAME; //輸出ROBIN.FANG
echo 'MY_NAME'; //輸出MY_NAME
靜態變數:靜態變數是指在函式內部定義變數的時候使用static關鍵字來定義變數
特點:函式執行完畢後變數不會立即消失,當再次呼叫函式時靜態變數保持的值依然存在,並且僅在第一次執行函式時會初始化值
function test(){
static $a=10;//僅在第一次呼叫時執行
echo ++$a;
}
test(); //11
echo'<br/>';
test(); //12
長久儲存一般儲存在硬碟或者資料庫中
引數傳遞
- 按值傳遞引數
function test($a){
echo ++$a; //因為a++中的++是在輸出後執行與printout一樣原理,所以要用++a
}
$i=10;
test($i); //11
echo'<br/>'.$i; //10
按值傳遞引數,我們在引數傳遞的時候預設的就是使用這個方式,對形式引數的操作根本不影響實際引數的值,兩者沒有聯絡
- 按引用傳遞引數
function test(&$a){
echo ++$a;
}
$i=10;
test($i); //11
echo'<br/>'.$i; //11
按引用傳遞引數,相當於形式引數和實際引數指的是同一個人,只是名字不一樣,對形式引數的操作會直接影響到實際引數(變數)
- 函式的預設引數
//例子1
function test($a=10){ //引數的預設值
echo ++$a;
}
test(); //11
//例子2
function test($a=10){
echo ++$a;
}
test(20); //21
可以給形式引數設定預設值,設定方法直接賦值即可,給形式引數加預設值的時候是從右往左加的,右邊的必須有,才能給左邊的加。
function test($a=20,$b=10){
echo $a+$b;
}
test(); //可以兩個都用預設值都不傳
function test($a=20,$b=10){
echo $a+$b;
}
test(25); //35
//這裡的25肯定是傳給a的
- 可變長度引數列表
php提供的可以直接使用
func_get_args();
func_get_arg();
func_num_args();
這三個函式可以使用在我們定義函式內部,能夠返回給我們關於此引數的資訊
<?php
function test(){
var_dump(func_get_args()); //顯示所有引數資訊
var_dunp(func_get_arg(4)); //檢視第4個引數
var_dump(func_num_args()); //返回引數個數
}
test(21,323232,4343,'單位取得','dmmcc');
?>
//var_dump()的功能和echo差不多都是輸出的功能
“<br/>”在php網頁中可以顯示換行,但<br/>在zend studio中沒法顯示,必須在html檔案中才能顯示,php檔案中用轉義字元'\n'
定義的函式如果裡面有echo輸出值是不會在控制檯顯示的,需要呼叫這個函式才會顯示
可變函式
function test(){
echo '我是test函式';
}
$a='test'; //把函式名加上引號賦值給變數
$a(); //test()
可變函式不能用於例如 echo(),print(),unset()...
遞迴函式
在函式內部自己呼叫自己的函式
<?php
function test($n){
echo $n.' ';
if($n>0){
test($n-1);
}
else{
echo'<-->';
}
echo $n.' ';
}
test(3); // 3 2 1 0 <-->0 1 2 3
?>
遞迴函式:
- 函式在被呼叫的執行過程中會在記憶體裡分配空間用於儲存臨時資料,那麼函式在執行過程中預設之間時沒有聯絡的(除了靜態變數、按引用傳、全域性變數),裡面的變數預設都是全域性變數,相互之間沒有影響
- 遞迴函式,在函式的內部需要適時結束函式執行的條件
內建函式
php的主要資料型別有 整形、浮點型、布林型、字串型