2018-1-25 函數方法
今天整理一下有關於php函數與方法的相關知識。
函數:定義形式:
function 函數名 (形參1,形參2,.... )
{
//函數體(代碼塊)
}
函數調用:①沒有返回值的函數,調用語句是獨立語句
函數名(實參1,實參2, .... ); 實參個數應該跟形參有匹配性。
②有返回值的函數,調用語句會“混雜”在別的語句中,並將該調用語句當作一個“數據”來使用:
A: $v1 = 函數名(); 賦值給其他變量;這裏省略實參語法,下同。
B: $v1 = 函數名() * 3 + 6; 參與運算,然後再賦值;
C: echo 函數名(); 直接輸出
D: echo 函數名
E: $v1 = 函數名2( 函數名() , 實參2,實參3, .... ); 當作實參使用
函數參數問題:形參與實參
形參:變量;只在該函數中有效;在函數中執行時有效,函數結束,變量“銷毀”。
實參:“實際數據”;作用是將自身數據“賦值給”形參變量
形參與實參應有“一一對應”關系。
定義形式: function 函數名(形參1,形參2,...... ){ 。。。。}
調用形式: 函數名(實參1,實參2,..... ) (一一對應)
默認值參數:function click(num=1){ (num=1就是默認值參數)
代碼
}
默認值只能是常量表達式,或常量,不能是變量。
函數傳值問題:
①默認都是值傳遞
②如果實參本身就是“直接數據”,則不存在傳值問題,而是簡單的“賦值”。
③讓某個參數(形參)以引用傳遞的方式來傳值:引用傳遞的形參(實參),在函數內部改變其值,在函數外面的實參,也會相應修改。
參數數量問題:
①通常,實際參數的數量應該跟形式參是的數量一致。
②如果形式參是中有默認值,則實際參數的對應項可以省略。即:實參的個數,至少應該不少於形參中的非默認值參數的個數。
三種系統函數:
func_get_args(); //獲得一個函數所接收到的所有實參數據,並結果是一個數組
func_get_arg(n); //獲得一個函數所接收到的第n個實參數據(n從0開始)
func_num_args(); //獲得一個函數所接收到的所有實參數據的個數
函數返回值:通常是值傳遞。也可以引用傳遞,具體形式:
function &函數名(形參1,形參2,.....) 註意函數名前有個引用符號“&”
{
$result = 0; //初始化。。。。。。
return $result; 此時返回數據,只能是變量
}
調用函數:
$v1 = &函數名(實參1,實參2,....); 引用返回的函數,自然是指有返回值。
可變函數:
function f1(){
echo "<br>函數f1被調用;";
}
$str1="f1";
$str1(); 調用可變函數(函數名此時是一個變量,內容是一個函數名)
匿名函數:未命名的函數
①$f1=function(){...函數體} 定義形式上沒有名字,其實將賦值給了變量$f1
②調用其他函數2(匿名函數,實參1,實參2, ......)
【1】此形式的匿名函數只有定義的函數體(無函數名)
【2】此形式的匿名函數只能作為其他函數調用時的參數(其他函數通常有特定用處)
【3】此匿名函數會在調用其他函數的“過程中”被執行。
call_user_func_array(匿名函數,數組);
將數組的每一項當作該匿名函數的若幹個實參,傳遞到該匿名函數中,並執行該匿名函數,並可以從該匿名函數中返回數據。
echo"<hr>";
cal_user_func_array(
function($m1,$m2,$m3){
echo"<br>m1=$m1";
echo"<br>m2=$m2";
echo"<br>m3=$m3";
}
,array(1,2,3)
);
echo<hr>;
$a1=aray(1,2,3,4,5,1);
$s=call_user_func_aray(
function(){ 可見這個匿名函數作用是求一個數組的“總和”
$a=func_get_args(); 取得傳遞過來的所有實參
$sum=0;
foreach($a as $v){
$sum += $v:
}
return $sum;
}
,$a1
);
echo "<br>和為:$s";
變量作用域:
局部作用域:只能在所定義的函數範圍內使用。
全局作用域:在函數的“外部”範圍使用。
php中,局部和全局作用域是不重疊的。
超全局:就是在函數的內部和外部都可以使用。
超全局變量系統定義,我們不能創建超全局變量。
靜態局部作用域:其實也是局部,但多一個特征:數據能夠在函數退出後仍然保持不丟失。
局部訪問全局變量:global $變量名
$v1=10; 全局
functon f3(){ 局部
golbal $v1; 訪問全局變量$v1
echo"<br>v1=$v1";
$v2=20;
}
f3();
全局訪問局部變量:
$v1 = 10;
function f1( &$p1, $p2){ ...... } //$p1是函數的形參,也即就是函數的內部(局部)變量
$v2 = f1( $v1, 10); //此時我們認為$v1就可以使用函數中$p1的值。
幾種有關函數的系統函數:
①function_exists(): 判斷某個函數是否被定義過,返回布爾值
if( function_exists(“ func1 “) == false ){
function func1(){。。。。。。}; 定義函數
}
②func_get_arg(n):獲得一個函數的第n個實參值(n從0開始)
③func_get_args():獲得一個函數的所有實參,結果是一個數組
④func_num_args():獲得一個函數的所有實參的個數。
2018-1-25 函數方法