一、用回調方式調用對象或類的方法
<?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);
?>