PHP学习——15 PHP函数(回调调用函数call_user_func_array、文件导入与包含、匿名函数与闭包的实现)

一、用回调方式调用对象或类的方法

<?php 
// call_user_func_array() 自定义回调函数的函数
// 它提供了另外一种调用函数的解决方案
class demo{
	static function func1($lang){
		return '我是'.$lang.'语言攻城狮!';
	}
	public function func2($lang){
		return '我是'.$lang.'语言攻城狮!';
	}
}
echo call_user_func_array(['demo','func1'],['php']);
echo '<hr>';
echo call_user_func_array([new demo(),'func2'],['javascript']);
?>

二、外部函数文件导入与文件包含:include和require的使用

include适用于条件引入,require在开头引入

// temp1.php
<?php
function showMessage1(){
	echo 'require引入文件';
}
?>

// temp2.php
<?php
function showMessage2(){
	echo 'include引入文件';
}
?>

// include.php
<?php
// require 'temp1.php';
require_once 'temp1.php'; // 文件只引入一次
showMessage1();
echo '<hr>';
$switchTab = true; // false
if($switchTab){
	// include 'temp2.php';
	include_once 'temp2.php';  // 文件只引入一次
	showMessage2();
}else{
	echo '没有使用include引入文件';
}
?>

注意:使用include引入文件失败,程序不会停止,但是会有警告;使用require引入文件失败,程序会报错停止.

三、匿名函数与闭包的实现:函数表达式与闭包的原理

<?php 
// 1.匿名函数:没有名称,或者名称可以动态设置的函数
// 创建一个匿名函数
$showMessage = function($lang){
	echo '我是'.$lang.'程序员';
};// 这是个语句,结束必须加分号

// 调用匿名函数
$showMessage('php	');
echo '<hr>';

// 2.闭包:在一个函数内引入一个匿名函数,就构成闭包(闭包是一个匿名函数在另外一个函数中被创建时的作用域)
function run($distance){
	$unit = '公里';
	$over = '.';
	$args = get_defined_vars();// 可以使用get_defined_vars返回由所有已定义变量所组成的数组 
	// $do = function ($distance) use ($args) { 
	$do = function ($distance) use ($unit,$over) {// 在匿名函数中访问外部变量使用use关键字
		// print_r($args);
		// return '我跑了'.$distance.$args['unit'].$args['over'];
		return '我跑了'.$distance.$unit.$over;
	};
	return $do($distance);
}
echo run(20);
echo '<hr>';
// 使用闭包实现递增
function selfAdd($n){
	$num = 1;
	$add = function () use (&$num){
		return $num+=1;
	};
	// echo $add();  // 1
	// echo '<br>';
	// echo $add();  // 2
	// echo '<br>';
	// echo $add();  // 3
	$str = '';
	$sum = 0;
	while($num<=$n){
		$str = $str.'+'.$num;
		$sum += $num;
		$num++;
	}
	$str = substr($str,1);
	echo $str.' = '.$sum;
}
echo selfAdd(10);
?>

四、函数创建与调用

<?php 
// 1.用function关键字创建,按名称调用,最直接和最普通的方式
echo '1.用function关键字创建,按名称调用:';
function func1($x,$y){ return $x.'+'.$y.'='.($x+$y); }
echo func1(1,2);
echo '<hr>';
// 2.用内置函数create_function()来创建
echo '2.用内置函数create_function()来创建:';
$func2 = create_function('$x,$y', 'return $x.\'+\'.$y.\'=\'.($x+$y);');
echo $func2(2,3);
echo '<hr>';
// 3.用function创建一个匿名函数
echo '3.用function创建一个匿名函数:';
$func3 = function($x,$y){ return $x.'+'.$y.'='.($x+$y); };
echo $func3(3,4);
echo '<hr>';
// 4.用function创建一个自执行函数
echo '4.用function创建一个自执行函数:';
echo (function($x,$y){ return $x.'+'.$y.'='.($x+$y); })(4,5);
?>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章