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);
?>

 

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