變量函數(shù)
<?php
// 聲明回調(diào)函數(shù)filter, 在0-100的整數(shù)中通過自定義條件過濾不要的數(shù)字
function filter( $fun ) {
for($i=0; $i <= 100; $i++) {
//將參數(shù)變量$fun加上一個(gè)圓插號(hào)$fun(), 則為調(diào)用和變量$fun值同名的函數(shù)
if( $fun($i) )
continue;
echo $i.'<br>';
}
}
//聲明一個(gè)函數(shù)one, 如果參數(shù)是3的倍數(shù)就返回true, 否則返回false
function one($num) {
return $num%3 == 0;
}
// 聲明一個(gè)函數(shù)two, 如果參數(shù)是一個(gè)回文數(shù)(翻轉(zhuǎn)后還等于自己的數(shù))返回true, 否則返回false
function two($num) {
return $num == strrev($num);
}
filter("one"); //打印出100以內(nèi)非3的倍數(shù),參數(shù)"one"是函數(shù)one()的名稱字符串,是一個(gè)回調(diào)
echo '--------------------<br>';
filter('two'); //打印出100以內(nèi)非回文數(shù),參數(shù)"two"是函數(shù)two()的名稱字符串,是一個(gè)回調(diào)
借助call_user_func_array()函數(shù)自定義回調(diào)函數(shù)
<?php
/** 聲明一個(gè)函數(shù)fun(), 功能只輸出兩個(gè)字符串,目的是作為call_user_func_array()回調(diào)參數(shù)
@param string $msg1 需要傳遞一個(gè)字符串作為參數(shù)
@param string $msg2 需要傳遞另一個(gè)字符串作為參數(shù)
*/
function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '<br>';
echo '$msg2 = '.$msg2;
}
/** 通過系統(tǒng)函數(shù)call_user_func_array() 調(diào)用函數(shù)fun()
第一個(gè)參數(shù)為函數(shù)fun()的名稱字符串
第二個(gè)參數(shù)則是一個(gè)數(shù)組,每個(gè)元素值會(huì)按順序傳遞給調(diào)用的fun()函數(shù)參數(shù)列表中
*/
call_user_func_array('fun', array('LAMP', '兄弟連'));
```
類靜態(tài)函數(shù)和對(duì)象的方法回調(diào)
<?php
/* 聲明一個(gè)類Demo,類中聲明一個(gè)靜態(tài)的成員方法fun() /
class Demo {
static function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '
';
echo '$msg2 = '.$msg2;
}
}
/ 聲明一個(gè)類Test, 類中聲明一個(gè)普通的成員方法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', '學(xué)習(xí)型PHP框架') );
>例 test.php
<?php
/*
- 在使用一個(gè)函數(shù)的時(shí)候, 如果傳一個(gè)變量, 不能解決多大的問題, 就需要將一個(gè)過程進(jìn)入到函數(shù)中, 改變函數(shù)的執(zhí)行行為.
- 在函數(shù)的調(diào)用時(shí), 在參數(shù)中傳的不是一個(gè)變量或一個(gè)值, 而是一個(gè)函數(shù), 這就是回調(diào)函數(shù)參數(shù)
- 制作回調(diào)函數(shù)
*/
function demo($num, $n) {
// $n = "test";
for($i=0; $i<$num; $i++) {
if($n($i))
continue;
echo $i."
";
}
}
function test($i) {
if($i==strrev($i))
return true;
else
return false;
}
demo(500, "test");