- 普通函數(shù)的定義及調(diào)用與js相似,這個(gè)定義方式無(wú)需返回值,哪怕是有返回值在聲明的時(shí)候也無(wú)需添加
- 再后來(lái)的PHP版本中是添加了一向很有用的功能就是可在函數(shù)定義之前進(jìn)行調(diào)用
echo add(1,2);
echo "</br>";
function add($a,$b){
return $a+$b;
}
function sub($a,$b){
return $a-$b;
}
echo add(23,12);
echo "</br>";
echo sub(23,22);
echo "</br>";
- 下面是一個(gè)非常有用的功能就是變量函數(shù),顧名思義就是將函數(shù)作為一個(gè)變量捐寥。
- 其優(yōu)點(diǎn)在于用同一個(gè)變量可以調(diào)用不同的函數(shù),非常類(lèi)似于函數(shù)的多態(tài)調(diào)用。
$var="add";
echo $var(4,2);
echo "</br>";
$var="sub";
echo $var(4,2);
echo "</br>";
回調(diào)函數(shù)就是在給一個(gè)函數(shù)傳入一個(gè)簡(jiǎn)單的參數(shù)無(wú)法解決問(wèn)題的時(shí)候給他傳入一個(gè)過(guò)程,從而達(dá)到目的
在函數(shù)調(diào)用時(shí)給他傳入一個(gè)函數(shù)作為參數(shù)就是函數(shù)回調(diào)卤材。
$arr=array(2,3,5,4,1,6,7,9,8);
var_dump($arr);
echo "</br>";
//這里是自定義回調(diào)函數(shù),返回-1是指將兩個(gè)元素交換,0和1是不發(fā)生改變训措。
function myrule($a,$b){
if ($a>$b){
return 1;
}
elseif ($a<$b){
return -1;
}
else{
return 0;
}
}
//usort就是系統(tǒng)函數(shù),但是他的第二個(gè)參數(shù)是回調(diào)函數(shù),這個(gè)函數(shù)參數(shù)就是排序規(guī)則
usort($arr,"myrule");
var_dump($arr);
echo "</br>";
- 自己寫(xiě)回調(diào)函數(shù),使用變量函數(shù)以及回調(diào)完成一個(gè)簡(jiǎn)單的過(guò)濾條件,如果需多個(gè)條件同時(shí)滿足給一個(gè)&&關(guān)系即可舟舒。
- 其中使用的變量函數(shù)可以使用系統(tǒng)中的一個(gè)叫做call_user_func_array()的函數(shù)進(jìn)行調(diào)用,他有兩個(gè)參數(shù)分別是回調(diào)函數(shù)名稱(chēng),以及參數(shù)數(shù)組
- call_user_func_array("demo",array(1,3));其優(yōu)點(diǎn)在于array中的參數(shù)的數(shù)量可以比原函數(shù)的少,既有默認(rèn)缺省參數(shù)的時(shí)候。
//rule1除去數(shù)組中是三的倍數(shù)的數(shù)
function rule1($a){
if ($a%3==0){
return true;
}else{
return false;
}
}
//rule2是除去數(shù)組中的回文數(shù)(從左邊讀與從右邊讀是一樣的)
function rule2($a){
if ($a==strrev($a)){
return true;
}else{
return false;
}
}
function demo($n,$var){
for ($i=0;$i<$n;$i++){
if (call_user_func_array($var,array(23)))
//if ($var($i))
{
continue;
}else{
echo $i."<br>";
}
}
}
$var="rule1";
demo(100,$var);
echo "</br>";
echo "<hr>";
$var="rule2";
demo(200,$var);
echo "</br>";
1 注意在調(diào)用對(duì)象里面的方法時(shí)我們需要傳入一個(gè)匿名對(duì)象,后面指定函數(shù)名
2 而在調(diào)用類(lèi)中的靜態(tài)方法時(shí)只需指定類(lèi)名即可。
- 以上兩種情況都不能完全使用變量函數(shù)只能用系統(tǒng)的回調(diào)call_user_func_array(),只是變量函數(shù)來(lái)傳參而不調(diào)用
class A{
function one(){
}
static function two(){
}
}
demo(200,array(new A,"one"));
demo(200,array("A","two"));