变量函数
如果将一个函数名称,给一个变量,然后在这个变量后面加上小括号,就会调用这个变量值对应的函数。
/**
* @url https://www.maosiji.com
*/
function maosiji_add( $a, $b ) {
return $a + $b;
}
$var = "maosiji_add";
echo $var( 2, 5 );
/*
打印结果:
7
*/
回调函数
在使用PHP函数时,如果传一个变量,不能解决问题;那就需要将一个过程(函数)传入到函数中,改变函数的执行行为。
/**
* @url https://www.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 '
';
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://www.maosiji.com
*/
function demo( $num, $fun ) {
for ( $i=0; $i<=$num; $i++ ) {
// 回文数不显示
if ( $fun($i) ) continue;
echo $i.'
';
}
}
function test( $i ) {
// 回文数
if ( $i == strrev($i) ) return true;
else return false;
}
demo ( 12, 'test' );
/*
打印结果:
10
12
*/
用call_user_func_array()函数实现
/**
* @url https://www.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.'
';
}
}
function test( $i ) {
// 回文数
if ( $i == strrev($i) ) return true;
else return false;
}
demo ( 12, 'test' );
/*
打印结果:
10
12
*/
/**
* @url https://www.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.'
';
}
}
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://www.maosiji.com
*/
// .当前文件夹里的
// ..上级文件夹里的
$dirname = './Default';
function fordir( $dirname ) {
// 打开目录资源
$dir = opendir( $dirname );
// 读资源
while ( $file = readdir( $dir ) ) {
$newfile = $dirname.'/'.$file;
if ( is_dir( $newfile ) ) {
echo "目录:{$newfile}
";
}
else {
echo "文件:{$newfile}
";
}
// echo readdir( $dir ).'
';
}
// 关闭资源
closedir( $dir );
}
fordir( $dirname );
递归函数
在函数中自己调用自己。
/**
* @url https://www.maosiji.com
*/
function digui( $i ) {
echo $i.'
';
if ( $i > 0 ) { digui( $i-1 ); }
else { echo '---'.'
'; }
echo $i.'
';
}
digui( 5 );
/*
打印结果:
5
4
3
2
1
---
1
2
3
4
5
*/
遍历文件夹下的所有文件夹及文件
/**
* @url https://www.maosiji.com
*/
$dirname = './Default';
function fordir( $dirname ) {
// 打开目录资源
$dir = opendir( $dirname );
// 读资源
while ( $file = readdir( $dir ) ) {
$newfile = $dirname.'/'.$file;
if ( is_dir( $newfile ) ) {
echo "目录:{$newfile}
";
fordir( $newfile );
}
else {
echo "文件:{$newfile}
";
}
// echo readdir( $dir ).'
';
}
// 关闭资源
closedir( $dir );
}
fordir( $dirname );