5.4.9 PHP制作回调函数3

变量函数

// 声明回调函数filter, 在0-100的整数中通过自定义条件过滤不要的数字
functionfilter($fun){
for($i=0; $i <= 100;$i++) {
//将参数变量$fun加上一个圆插号$fun(), 则为调用和变量$fun值同名的函数
if( $fun($i))
continue;
echo$i.'
';
}
}
//声明一个函数one, 如果参数是3的倍数就返回true, 否则返回false
** function** one($num) {
return$num%3==0;
}
// 声明一个函数two, 如果参数是一个回文数(翻转后还等于自己的数)返回true, 否则返回false
** function** two($num) {
return$num==strrev($num);
}
filter("one"); //打印出100以内非3的倍数,参数"one"是函数one()的名称字符串,是一个回调
echo'--------------------
';
filter('two'); //打印出100以内非回文数,参数"two"是函数two()的名称字符串,是一个回调

借助call_user_func_array()函数自定义回调函数


';
        **echo**'$msg2 = '.$msg2;
    }
    
    /** 通过系统函数call_user_func_array() 调用函数fun()
        第一个参数为函数fun()的名称字符串
        第二个参数则是一个数组,每个元素值会按顺序传递给调用的fun()函数参数列表中
    */
    call_user_func_array('fun',**array**('LAMP', '兄弟连'));
    

类静态函数和对象的方法回调

';
            **echo**'$msg2 = '.$msg2;
        }
    }
    /* 声明一个类Test, 类中声明一个普通的成员方法fun()  */
    **class**Test {
        **function**fun($msg1,$msg2) {
            **echo**'$msg1 = '.$msg1;
            **echo**'
'; **echo**'$msg2 = '.$msg2; } } call_user_func_array(**array**("Demo", 'fun'),**array**('LAMP', '兄弟连') ); call_user_func_array(**array**(**new**Test(),'fun'), **array**('BroPHP','学习型PHP框架') );

例test.php

";
    }

    //参数个数如果是变长时, 就不能直接调用这个函数

    call_user_func_array("fun", array(111, 222, 333333));
 */

    function demo($num, $n) {
        // $n = "test";

        for($i=0; $i<$num; $i++) {
            // if($n($i))
            if(call_user_func_array($n, array($i)))
                continue;
            echo $i."
"; } } class Filter { function one($i) { if($i%3==0) { return true; }else{ return false; } } static function two($i) { if(preg_match('/3/', $i)) { return true; }else{ return false; } } } /* $filter = new Filter(); $filter->one(); Filter::two(); */ function test($i) { if($i==strrev($i)) return true; else return false; } // demo(500, "test"); demo(500, array(new Filter(), "one")); // demo(500, array("Filter", "two"));

你可能感兴趣的:(5.4.9 PHP制作回调函数3)