您好,登錄后才能下訂單哦!
怎么在PHP中實現一個函數重載功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
<?php class A { function __call ( $name, $arguments ) { echo "__call調用<br/>"; echo '$name為'.$name."<br/>"; print_r ($arguments); } } (new A)->test("test","argument"); ?>
運行結果為:
__call調用
$name為test
Array ( [0] => test [1] => argument )
因此只需要利用該魔術方法既可以實現函數重載。
代碼如下:
<?php class A { function __call ($name, $args ) { if($name=='f') { $i=count($args); if (method_exists($this,$f='f'.$i)) { call_user_func_array(array($this,$f),$args); } } } function f1($a1) { echo "1個參數".$a1."<br/>"; } function f2($a1,$a2) { echo "2個參數".$a1.",".$a2."<br/>"; } function f3($a1,$a2,$a3) { echo "3個參數".$a1.",".$a2.",".$a3."<br/>"; } } (new A)->f('a'); (new A)->f('a','b'); (new A)->f('a','b','c'); ?>
輸出如下:
1個參數a
2個參數a,b
3個參數a,b,c
同樣的在PHP中,實現構造函數的重載,也只能變通的實現。實現的關鍵要素是獲取輸入參數,并且根據輸入參數判斷調用哪個方法。下面是一個示例代碼:
<?php class A { function __construct() { echo "執行構造函數<br/>"; $a = func_get_args(); //獲取構造函數中的參數 $i = count($a); if (method_exists($this,$f='__construct'.$i)) { call_user_func_array(array($this,$f),$a); } } function __construct1($a1) { echo "1個參數".$a1."<br/>"; } function __construct2($a1,$a2) { echo "2個參數".$a1.",".$a2."<br/>"; } function __construct3($a1,$a2,$a3) { echo "3個參數".$a1.",".$a2.",".$a3."<br/>"; } } $o = new A('a'); $o = new A('a','b'); $o = new A('a','b','c'); ?>
執行構造函數
1個參數a
執行構造函數
2個參數a,b
執行構造函數
3個參數a,b,c
看完上述內容,你們掌握怎么在PHP中實現一個函數重載功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。