本篇主要介紹PHP函數重載分析及實例,有興趣的朋友參考下,希望對大家有幫助。
對於弱型別語言來說,PHP函數重載,並不像一般的OOP。
因為函數重載必須滿足兩個條件:
1、函數參數的數量不一樣。
2、參數的型別不一樣。
這兩點,PHP都沒有辦法滿足,您可以對函數多加入參數,只是相當於多傳了個臨時變數。而弱類型本來就不區分,所以無法透過這些來實現。
但是,可以透過下面的方法來實現簡單的偽重載吧。
1、預設參數
從這個上面就可以看到,如果一個函數裡面,我對不是必須參數填入新增對應的預設值,就可以完成對應的功能。
function overloadFun($param1, $param2 = '1',$param3 = true) { // do something }
2、利用函數func_get_args()和call_user_func_array(),詳細的幫助參考PHP手冊。
利用一個有規則的函數進行調用,以方便統一管理。
function overloadFun() { // overloadFun可以随便定义,但为了命名规范,建议宝贝为与此函数名一样, // 后面的尾随数值为参数个数,以方便管理 $name="overloadFun".func_num_args(); return call_user_func_array(array($this,$name), func_get_args()); } function overloadFun0() { // do something } function overloadFun1() { // do something } function overloadFun2() { // do something }
3、利用__call($name, $arg) 函數來處理。
function __call($name, $args) { if($name=='overloadFun') { switch(count($args)) { case 0: $this->overloadFun0();break; case 1: $this->overloadFun1($args[0]); break; case 2: $this->overloadFun2($args[0], $args[1]); break; default: //do something break; } } } function overloadFun0() { // do something } function overloadFun1() { // do something } function overloadFun2() { // do something }
總結,這幾種方法,都可以實現偽重載,基本第2種和第3種,內容可以互相處理判斷。
文中只是給了方法,可能還有許多細節地方需要處理,例如,判斷整數、類別等。
不過,根據上面的內容,php可能永遠不會出現真正的重載,那樣就會失去語言本身的意義了。
相關推薦:
php函式重載的替代方法--偽重載詳解,重載詳解_PHP教學
以上是PHP函數重載分析及實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!