php中の異なった方法の中で同名の方法の処理

1540 ワード

最近はcodeigniterのソースコードを調べて、helper類はカスタム方法ができることを発見しました.それによってシステムhelper方法を拡張したり書き換えたりします.
CI ヘルパー類紹介http://codeigniter.org.cn/user_guide/general/helpers.
クラスについては、インプリメンテーション方法の書き換えまたは拡張が可能ですが、方法については大丈夫ですか?そこで試してみました.
二つの参照ファイルを作成します.中には同名の方法があります.
include 1.php
function testfun() {
	echo 'this is function 1';
}
include.php
function testfun() {
	echo 'this is function 2';
}
スクリプトtest.phpを呼び出します.
include './include2.php';
include './include1.php';
testfun ();
test.php実行時システムエラー:Fatal error:Canot redeclare testfun() 
複数のスクリプトファイルを引用する場合は、同名の方法は含まれないようです.そうでないと、呼び出しの時、phpはどの定義方法を実行するか分かりません.
引用スクリプトがクラスの場合は、この問題は存在しません.呼び出し方法はインスタンスクラスが必要です.
後にciの実現原理を調べて、各方法の最外層は入れ子します. function_exists関数
このように二つのファイルが
include 1.php
if (!function_exists ( 'testfun' )) {
	function testfun() {
		echo 'this is function 1';
	}
}
include.php
if (! function_exists ( 'testfun' )) {
	function testfun() {
		echo 'this is function 2';
	}
}
こうしてtest.phpを呼び出すと、出力されます. this is function 1.このように方法の書き換えを実現しました.
ただし、注意が必要です.
1.引用の順序に注意して、先に引用したものは基準とする.
2.複数のファイルを引用した場合、カバー方法が現れず、希望の効果が得られない可能性があります.
   このような方法が必要であれば、参照されたファイルを明確にする必要があり、ciはフレームワークで使用方法を規定している.