首頁  >  文章  >  後端開發  >  php回呼函數怎麼寫

php回呼函數怎麼寫

silencement
silencement原創
2019-09-24 14:00:553796瀏覽

php回呼函數怎麼寫

普通函數的定義及呼叫與js相似,這個定義方式無需傳回值,即使是有回傳值在宣告的時候也不需要加。

再後來的PHP版本中是加入了一向很有用的功能就是可在函數定義之前進行呼叫。

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>";

下面是一個非常有用的功能就是變數函數,顧名思義就是將函數當作一個變數。

其優點在於用同一個變數可以呼叫不同的函數,非常類似函數的多型呼叫。

$var="add";
echo $var(4,2);
echo "</br>";
$var="sub";
echo $var(4,2);
echo "</br>";

回呼函數就是在給一個函數傳入一個簡單的參數無法解決問題的時候給他傳入一個過程,從而達到目的。

在函數呼叫時給他傳入一個函數當參數就是函數回呼。

$arr=array(2,3,5,4,1,6,7,9,8);
var_dump($arr);
echo "</br>";
//这里是自定义回调函数,返回-1是指将两个元素交换,0和1是不发生改变。
function myrule($a,$b){
    if ($a>$b){
        return 1;
    }
    elseif ($a<$b){
        return -1;
    }
    else{
        return 0;
    }
}
//usort就是系统函数,但是他的第二个参数是回调函数,这个函数参数就是排序规则
usort($arr,"myrule");
var_dump($arr);
echo "</br>";

自己寫回呼函數,使用變數函數以及回呼完成一個簡單的過濾條件,如果需多個條件同時滿足給一個&&關係即可。

其中使用的變數函數可以使用系統中的一個叫做call_user_func_array()的函數進行呼叫,他有兩個參數分別是回調函數名稱,以及參數數組

call_user_func_array("demo ",array(1,3));其優點在於array中的參數的數量可以比原函數的少,既有預設缺省參數的時候。

//rule1除去数组中是三的倍数的数
function rule1($a){
    if ($a%3==0){
        return true;
    }else{
        return false;
    }
}
//rule2是除去数组中的回文数(从左边读与从右边读是一样的)
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>";

 注意在呼叫物件裡面的方法時我們需要傳入一個匿名物件,後面指定函數名稱

而在呼叫類別中的靜態方法時只需指定類別名稱即可。

以上兩種情況都不能完全使用變數函數只能用系統的回呼call_user_func_array(),只是變數函數來傳參而不呼叫

class A{
    function one(){
    }
    static function two(){
    }}demo(200,array(new A,"one"));demo(200,array("A","two"));

以上是php回呼函數怎麼寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn