函數 1. 函數名是標識符之一,只能有字母數字下劃線,開頭不能是數字; 函數名的命名,必須符合“小駝峰法則”FUNC(),func(),Func(); 函數名不區分大小寫; 函數名不能與已有函數同名,不能與內置函數名同名; 2. function_exists("func");用於檢測函數是否已經聲 ...
函數 1. 函數名是標識符之一,只能有字母數字下劃線,開頭不能是數字; 函數名的命名,必須符合“小駝峰法則”FUNC(),func(),Func(); 函數名不區分大小寫; 函數名不能與已有函數同名,不能與內置函數名同名; 2. function_exists("func");用於檢測函數是否已經聲明; 註意傳入的函數名,必須是字元串格式,返回結果為true/false; echo列印時,true為1,false不顯示; [php中變數的作用域] 1.局部變數:聲明在函數內部的變數,稱為局部變數,只在函數內部使用,函數外如需使用,需在函數中使用return關鍵字返回; 2.全局變數:聲明在函數外部的變數,稱為全局變數; 3.(較為常用)函數中使用變數預設使用局部變數,如果需在函數中使用全局變數,需要使用global關鍵字將全局變數引入使用; 函數中的變數名,如果與全局變數名重覆,global之上,為函數的局部變數,global之下為函數的全局變數; 4.$GLOBALS[''] 全局數組; $GLOBALS['a3'] 數組,是PHP給我們內置的全局數組,可以直接給數組添加值,無論在函數內外聲明,均可在任何地方直接使用;eg:$GLOBALS['a3'] =10; 5.函數中使用全局變數,還有一種方式:通過給參數傳參,可以在函數內部使用全局變數,但是傳遞以後的參數是局部變數,內部改變,外部不會改變,除非傳遞的參數是地址.function func($a1,&$a2){}func($a1,$a2); (原因) $a1是局部變數,內部改變,外部不會改變,$a2也是內部變數地址,內部改變,外部也改變; 如果函數的形參,出現了取地址符號,則調用函數時,實參必須是變數,而不能是字面量 ; eg:func($a1,$a2)對的 func($a1,2)錯的 【靜態變數】 靜態變數:使用static關鍵字聲明,static $num=10; 靜態變數的特點: 靜態變數在函數第一次載入的時候進行聲明; 函數使用完不會立即釋放靜態變數,靜態變數在整個腳本執行過程中只會聲明一次; 同一函數多次調用,共用同一個靜態變數。 [函數的參數傳遞方式] 在PHP中實參的個數只能比形參多,不能比形參少,否則會報錯 1.常規參數傳遞: function fun($a){ $a+=10; return $a; } echo fun(10); 2.引用類型的參數: $a=10; function func(&$a){ $a+=10; }func($b); 引用參數傳遞,函數內部修改變數,函數外同步變化; 形參為引用參數,實參只能是變數,不能是字面量。 3.預設參數: function func($a,$b=10){ return $a+$b; } echo func(30); //$b的預設參數是10 如果參數中既有預設參數,又有非預設參數,那麼,預設參數列表必須要在非預設參數列表的後面,即要保證非預設參數的賦值順序. func_get_args(); //取所有參數列表(數組) func_num_args(); //取所有參數的總個數,相當於count(func_num_args()); func_get_arg(0); //根據下表,取每個參數 [變數函數 ] 將一個函數名,轉為字元串後,賦給一個變數。這個變數,就是我們所說的變數函數,可以加()調用函數內容; function func(){ }---->fun="func",----->func( ); [回調函數] 1.使用變數函數,自定義回調函數; function($func){func();}-->function f(){}--->func("f"); 2使用call_user_func_array和call_user_func自定義回調函數; 兩個函數的第一個參數,均為回調函數,表示執行當前回調; 不同點在於:call_user_func_array()第二個參數為數組,並將數組的每一個值賦給回調函數的參數列表,相當於js中的apply(); 而,call_user_func,是將回調函數的參數列表,直接展開寫到第2-多個參數中,相當於js中的call(); eg:call_user_func_array("func",array(1,2,3));--->func(1,2,3); call_user_func("func" 1,2,3);---->func(1,2,3); [ 匿名函數] 由於變數函數在調用時存在多種調用方式,$fun()/func()所以為了讓函數的調用更為統一,才產生了匿名函數。
聲明匿名函數函數體後面的;必不可少!!!
匿名函數本身也是變數,用var_dump檢測為object類型;
常規函數:
function func(){ $fun="func" } $fun();//func();
匿名函數:
$func=function($a){
echo "我是匿名函數{$a}<br/>";
}; //聲明匿名函數函數體後面的;必不可少
$func(10);
var_dump($func);
例題:計算一個數的階層:
function jiec($num){ static $jie=1; //函數執行完不會立即釋放 if($num>0){ $jie*=$num; //3 jiec(--$num); } return $jie; } echo jiec(10);
[遞歸函數]
function func($num){ echo $num."<br/>"; if($num>0){ func($num-1); //func(--$num); 試一試又不一樣的結果喲! //func($num--); } echo $num."<br/>"; }func(10);
[include/require]
1.兩者的作用就是用於引入外部的PHP文件到當前文件中:include 'a.php';include ('a.php');
2.兩者的區別:(對於錯誤的處理不同)當引入文件錯誤時,include會產生警告,並不影響後續代碼的執行,而require會產生錯誤,後續代碼不再執行;
3.一般當用於在文件最上方導入某些文件時,使用require導入,如果失敗,則不執行文件;
如果是在某些分支條件中,導入執行某些操作,一旦報錯不影響執行結果。
4.include_once和require_once表示:文件只能導入一次,如果多次調用函數,則後面的文件會判斷文件是否導入,再決定是否導入新文件。
(檢測文件是否導入時只關心文件是否已經導入,並不關心使用何種方式導入的。)
5.include/require可以導入各種類型的文件,相當於在當前文件copy了一份,但是copy過程中,PHP引擎會進行適當的編譯,確保不會出錯。
6.include和require是函數也是指令!PHP對於很多常用函數,會提供執行的寫法,eg:函數寫法echo("111");指令寫法echo "111";