PHP函數(shù)的默認參數(shù)
定義函數(shù)形參時可以設置默認參數(shù),當函數(shù)被調用未傳參時會使用默認參數(shù)。有傳參時會優(yōu)先傳參值。
<?php //演示默認參數(shù) //定義函數(shù)sum求和 有$a、$b 2個參數(shù)均設置了默認值5 function sum($a=5,$b=5){ return $a+$b; }; //函數(shù)調用 我不傳輸任何參數(shù) 但是函數(shù)會返回10 因為有2個默認參數(shù) echo sum(),'<hr>'; //我值傳一個值 此時結果是15 參數(shù)會代替默認參數(shù) 也就是$a是10 echo sum(10),'<hr>'; //當傳入2個值時候 分別以我傳參為優(yōu)先級最高 來計算。 echo sum(10,10),'<hr>'; //當參形參自定義后 要按照順序傳入?yún)?shù)
點擊 "運行實例" 按鈕查看在線實例
PHP剩余參數(shù)
可以支持部分參數(shù)以數(shù)組的方式傳入 適合有大量參數(shù)時候使用。
<?php //演示 剩余參數(shù):可變長參數(shù) function sum3($a,$b,...$c){ return $a+$b+array_sum($c); }; echo sum3(5,5,10,10,10),'<hr>'; //根據(jù)剩余參數(shù)特性可以將部分參數(shù)從外部數(shù)組直接獲取 function sum4($a,$b,...$arr){ return $a+$b+array_sum($arr); }; $arr=[20,20,20]; echo sum4(5,5,...$arr),'<hr>'; //限制返回值 限制第一個參數(shù)為int整數(shù) '6'運算時候會自動轉換成數(shù)字 不能轉換的會忽略不會報錯 function sum5(int $a,$b,...$arr){ return $a+$b+array_sum($arr); }; $arr=[6,'p6d','6lang']; echo sum3(5,5.2,...$arr),'<hr>'; //上面數(shù)組中 雖然出現(xiàn)了 字符串 但是并不會報錯 不能轉換為數(shù)組的 只是不進行計算而已。
點擊 "運行實例" 按鈕查看在線實例
PHP匿名函數(shù)
<?php //匿名函數(shù) //匿名函數(shù) 函數(shù)表達式 $sum=function($a,$b){ return $a+$b; }; //調用輸出 echo $sum(2,3),'<hr>';
點擊 "運行實例" 按鈕查看在線實例
PHP匿名函數(shù)獲取外部數(shù)據(jù)
<?php // 匿名函數(shù)獲取外部數(shù)據(jù) $str='我是全局變量中的一段文字。11111'; $str2='我是全局變量中的一段文字。22222'; //在匿名函數(shù)中可以通過 use($var)將全局變量 傳值 獲得值(函數(shù)內(nèi)修改不影響全局) $func1=function() use($str){ $str1='我想看看外面的世界~'; return $str; }; echo $func1(); $str='我是全局變量中的一段文字。11111'; //在匿名函數(shù)中可以通過 use(&$var)將全局變量 引用傳遞(傳址)調用(函數(shù)內(nèi)修改影響全局) $func2=function() use(&$str2){ $str2='我被刁民 func2 使用了& 把我給頂替了~'; return $str2; }; echo $func1(),'<hr>'; echo $func2(),'<hr>'; //函數(shù)允許嵌套調用 function demo(){ $name='大灰狼 函數(shù)嵌套調用'; return function() use($name){ return $name; }; }; //因為demo返回的是一個函數(shù) 所以得先放到一個變量中 在運行 $f1=demo(); echo $f1(),'<hr>'; //也可以簡化為 echo demo()();
點擊 "運行實例" 按鈕查看在線實例
call_user_func_array()的常用場景
// 語法 call_user_func_array($callback, $param_arr);
常用場景如
1、需要調用的函數(shù)名是未知的;
2、要調用函數(shù)的參數(shù)類型及個數(shù)也是未知的;
//實際使用 function sayEnglish($fName, $content) { echo 'I am ' . $content; } function sayChinese($fName, $A, $B) { echo $A . $B; echo "<br>"; } function say() { $args = func_get_args(); call_user_func_array($args[0], $args); } say('sayChinese', '我是', '中國人'); say('sayEnglish', 'Chinese'); //改進----------------------------------------------------- echo '<hr>'; function sayEnglish2(...$arr) { echo 'Americans say: <pre>' .print_r($arr,true); } function sayChinese2(...$A) { echo '中國說:<pre>'.print_r($A,true); echo "<br>"; } function say2($fname,...$arr) { call_user_func_array($fname, ...$arr); } say2('sayChinese2', ['我是中國人', '我不姓福','但是我日子幸福']); say('sayEnglish2', ['Chinese','good']); //say($funcName,$conterArr);
點擊 "運行實例" 按鈕查看在線實例
動態(tài)調用普通函數(shù)時,比如參數(shù)和調用方法名稱不確定的時候很好用。
函數(shù)名可以用參數(shù)的方式傳遞進去,因而調用不同函數(shù)。 配合func_get_args()或剩余參數(shù) 接收參數(shù)到數(shù)組中,參數(shù)的個數(shù)也可以不一致。
不需要判斷函數(shù)類型,無論是普通函數(shù),類的靜態(tài)方法或者類的方法,均直接調用,不用去判斷方法的類型。
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號