php中不同方法中同名方法的處理

2021-09-08 16:22:42 字數 1108 閱讀 5468

近日檢視codeigniter原始碼,發現其helper類可以自定義方法,從而對系統helper方法進行擴充套件或重寫。

ci  herper類介紹

對於類可以繼承實現方法的重寫或擴充套件,對於方法可以嗎?於是做了一下嘗試

建立兩個引用檔案,裡面有乙個同名方法。

include1.php

function testfun()

include2.php

function testfun()

呼叫指令碼test.php

include './include2.php';

include './include1.php';

testfun ();

執行test.php時候系統報錯:fatal error: cannot redeclare testfun() 

看來在引用多個指令碼檔案時候不能包含同名方法。否則在呼叫時候,php分不清執行哪個定義方法。

如果引用指令碼都是類就不存在此問題,因為呼叫方法需要例項化類。

後來檢視ci的實現原理,每個方法最外層巢狀 function_exists函式

這樣兩檔案變為

include1.php

if (!function_exists ( 'testfun' )) 

}

include2.php

if (! function_exists ( 'testfun' )) 

}

這樣再呼叫test.php時候,會輸出  this is function 1.如此實現了方法的重寫。

但是需要注意幾點

1.注意引用的順序,先引用的為準

2.引用過多檔案時,不會出現方法覆蓋,可能達不到想要的效果

如果需要這種方法重寫的話,需要清楚所引用的檔案,ci中用框架規範了使用方法。

JS中不同方法如何實現繼承

首先來乙個父類的建構函式 父類 function person name,age,person.prototype.personlogage function let person1 newperson xiao 20 male console.log person1 person注意 物件a的 p...

Xpages中訪問URL資源的不同方法總結

內容 只取主機 return context.geturl tostring split facescontext.getexternalcontext getrequest getrequesturi 0 主機帶資料庫名 return context.geturl tostring 資料庫檔名 l...

strut2中萬用字元實現不同方法的呼叫

例如輸入 http localhost 8080 struct control department action1 othermethod 就跳轉 到 action1 中的thermethod方法。輸入 http localhost 8080 struct control department a...