PHP变量函数 回调函数 系统函数 递归函数

猫斯基  — PHP


变量函数

如果将一个函数名称,给一个变量,然后在这个变量后面加上小括号,就会调用这个变量值对应的函数。

/**
 * @url https://maosiji.com
 */
function maosiji_add( $a, $b ) {
	return $a + $b;
}
$var = "maosiji_add";
echo $var( 2, 5 );
/*
打印结果:
7
*/

回调函数

在使用函数时,如果传一个变量,不能解决问题;那就需要将一个过程(函数)传入到函数中,改变函数的执行行为。

/**
 * @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
0
---
0
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 );

阅读量:0 2021-01-05 17:16

返回顶部