重複の可能性:
PHPで実行時に関数を削除する
実行中にさまざまなファイルを含むスクリプトがあります。すべてのファイルに同じ名前の関数が含まれています。現在含まれているものだけが存在する必要があります。インクルードを含む動的ファイルを有効にする方法はありますか?致命的なエラーが発生することはありません:function()を再宣言できませんか?つまり、前の関数の名前を変更するか、削除する必要があります。
関数は古典的な方法で宣言されますfunctionfn(){;}
重複の可能性:
PHPで実行時に関数を削除する
実行中にさまざまなファイルを含むスクリプトがあります。すべてのファイルに同じ名前の関数が含まれています。現在含まれているものだけが存在する必要があります。インクルードを含む動的ファイルを有効にする方法はありますか?致命的なエラーが発生することはありません:function()を再宣言できませんか?つまり、前の関数の名前を変更するか、削除する必要があります。
関数は古典的な方法で宣言されますfunctionfn(){;}
関数を「function_exists」チェックでラップする必要があります。
if (!function_exists('my_func')){
function my_func(){
//...
}
}
あなたはここでより多くの詳細を見つけることができます:http://php.net/manual/fr/function.function-exists.php
各ファイルが同じ名前のトップレベル関数を定義するのではなく、非常に単純なOO構造を使用することを検討してください。
あなたがこのようなものを持っていると仮定します:
switch ( $some_condition )
{
case 'normal':
default:
include_once 'normal_function.php';
break;
case 'special':
include_once 'special_function.php';
break;
case 'secret':
include_once 'secret_function.php';
break;
}
do_the_action();
次のようなものに置き換えることができます。
switch ( $some_condition )
{
case 'normal':
default:
include_once 'normal_class.php';
$handler_object = new Normal_Class();
break;
case 'special':
include_once 'special_class.php';
$handler_object = new Special_Class();
break;
case 'secret':
include_once 'secret_class.php';
$handler_object = new Secret_Class();
break;
}
$handler_object->do_the_action();
次に、含まれている各ファイルで、1つの関数ではなく、次のようにその関数を含むクラスを定義します。
class Normal_Class
{
public function do_the_action()
{
// Implementation for normal case goes here
}
}
これにより、問題が解決するだけでなく、他の高度な/ OO PHPテクニック(ファイルを自動ロードするため、include_once
毎回指定する必要がない、階層やインターフェイスを定義するなど)を学ぶことができます。