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

变量函数

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

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