变量函数
如果将一个函数名称,给一个变量,然后在这个变量后面加上小括号,就会调用这个变量值对应的函数。
/** * @url https://maosiji.com */ function maosiji_add( $a, $b ) { return $a + $b; } $var = "maosiji_add"; echo $var( 2, 5 ); /* 打印结果: 7 */
回调函数
在使用PHP函数时,如果传一个变量,不能解决问题;那就需要将一个过程(函数)传入到函数中,改变函数的执行行为。
/** * @url https://maosiji.com */ $arr = array(1,2,4,8,9,45,3); function mysort( $a, $b ) { if ( $a> $b ) { return 1; } elseif ( $a < $b ) { return -1; } else { return 0; } } print_r( $arr ); echo '<br />'; usort( $arr, "mysort" ); print_r ( $arr ); /* 打印结果: Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 8 [4] => 9 [5] => 45 [6] => 3 ) Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 8 [5] => 9 [6] => 45 ) */
打印出12以内的数,且排除回文数。
/** * @url https://maosiji.com */ function demo( $num, $fun ) { for ( $i=0; $i<=$num; $i++ ) { // 回文数不显示 if ( $fun($i) ) continue; echo $i.'<br />'; } } function test( $i ) { // 回文数 if ( $i == strrev($i) ) return true; else return false; } demo ( 12, 'test' ); /* 打印结果: 10 12 */
用call_user_func_array()
函数实现
/** * @url https://maosiji.com */ function demo( $num, $fun ) { for ( $i=0; $i<=$num; $i++ ) { // 变量函数实现 // if ( $fun($i) ) continue; // call_user_func_array函数实现 if ( call_user_func_array( $fun, array($i)) ) continue; echo $i.'<br />'; } } function test( $i ) { // 回文数 if ( $i == strrev($i) ) return true; else return false; } demo ( 12, 'test' ); /* 打印结果: 10 12 */
/** * @url https://maosiji.com */ function demo( $num, $fun ) { for ( $i=0; $i<=$num; $i++ ) { // 变量函数实现 // if ( $fun($i) ) continue; // call_user_func_array函数实现 【此时只能用这个了,因为变量函数只能接收一个字符串】 if ( call_user_func_array( $fun, array($i)) ) continue; echo $i.'<br />'; } } function test( $i ) { // 回文数 if ( $i == strrev($i) ) return true; else return false; } class maoFilter { function one( $i ) { // 可以被3整除 if ( $i%3 == 0 ) { return true; } else { return false; } } static function two( $i ) { // 不包括3的 if ( preg_match( '/3/', $i) ) { return true; } else { return false;} } } /* $maoFilter = new maoFilter(); $maoFilter->one(); Filter::two(); */ // demo ( 12, 'test' ); demo ( 12, array( new maoFilter(), 'one' ) ); // demo ( 12, array( 'maoFilter, 'two' ) ); /* 打印结果: 1 2 4 5 7 8 10 11 */
系统函数
遍历一层文件夹
/** * @url https://maosiji.com */ // .当前文件夹里的 // ..上级文件夹里的 $dirname = './Default'; function fordir( $dirname ) { // 打开目录资源 $dir = opendir( $dirname ); // 读资源 while ( $file = readdir( $dir ) ) { $newfile = $dirname.'/'.$file; if ( is_dir( $newfile ) ) { echo "目录:{$newfile}<br />"; } else { echo "文件:{$newfile}<br />"; } // echo readdir( $dir ).'<br />'; } // 关闭资源 closedir( $dir ); } fordir( $dirname );
递归函数
在函数中自己调用自己。
/** * @url https://maosiji.com */ function digui( $i ) { echo $i.'<br />'; if ( $i > 0 ) { digui( $i-1 ); } else { echo '---'.'<br />'; } echo $i.'<br />'; } digui( 5 ); /* 打印结果: 5 4 3 2 1 --- 1 2 3 4 5 */
遍历文件夹下的所有文件夹及文件
/** * @url https://maosiji.com */ $dirname = './Default'; function fordir( $dirname ) { // 打开目录资源 $dir = opendir( $dirname ); // 读资源 while ( $file = readdir( $dir ) ) { $newfile = $dirname.'/'.$file; if ( is_dir( $newfile ) ) { echo "目录:{$newfile}<br />"; fordir( $newfile ); } else { echo "文件:{$newfile}<br />"; } // echo readdir( $dir ).'<br />'; } // 关闭资源 closedir( $dir ); } fordir( $dirname );
本文由 猫斯基 原创发布。
著作权均归用户本人所有。独家文章转载,请联系本站管理员。获得授权后,须注明本文地址! 本文地址:https://maosiji.com/php/php-11.html