2016-07-29 8 views
-1

これは完全にゴミのような質問ですが、私は完全に混乱しています。例えばphpで呼び出された関数をファイルにインクルードする方法

iはmyfunction.phpような関数名とファイルの100年代を含む、このファイルが(MyFunctionをを有する機能)としてディレクトリ名を持っています。私は

include 'Function/'.$functionName.'.php'; // here file should auto include. 
myfunction(); // i called this function here so when i called this function then myfunction.php file should auto include in above line 

のように、この関数を呼び出したときに

ので、自動的にファイルをインクルードするどのような方法があります。 私に方法を示唆してください。

+0

、メソッドのオーバーロードを使用しようとすることができますか? 'Function'ディレクトリに' $ functionName'で指定された有効なファイルがあれば、それは問題ありません。 – Umair

+0

あなたは何をすることができますか?include.phpを作成します。それを呼ぶ。 $ functionNameがインクルード行の上に宣言されていない限り、関数は自動的にインクルードしません。 – Danimal

+0

* "関数が" * - 'function myfunction(){ここに含まれています}'と呼び出され、関数が呼び出されます。あなたの質問の周りに私の頭を包んで苦労しているTBH。 –

答えて

2

定義されていない関数を呼び出すと、未定義のエラーがスローされ、実行時に実行が停止します。エラーをキャッチすることができたとしても、関数出力を元の変数に戻すことはできません。

私の推薦は、ページの開始時にすべての機能が含まれています。それ以外の場合は

foreach (glob("Function/*.php") as $filename) 
{ 
    include $filename; 
} 

、手動で各呼び出しのために、このような何かをする必要があると思います:

try { 
    $ret = example_function(); 
} catch (Exception $e) { 
    include('Function/example_function.php'); 
    $ret = example_function(); 
} 

あなたができましたただし、それを行うカスタム関数を作成します。

function myFunction() 
{ 
    $args = func_get_args(); 

    $func_name = array_shift($args); 

    if (!function_exists($func_name)) { 
     include('Function/' . $func_name . '.php'); 
    } 

    return call_user_func_array($func_name, $args); 
} 

myFunction('testFunction', $param1, $param2)で機能を呼び出してください。

クラスを読み込んでいる場合、これは簡単になります。 PHP autoloadingを使用すると、このタスクを実行できます。

オブジェクト指向アプリケーションを作成する開発者の多くは、クラス定義ごとに1つのPHPソースファイルを作成します。最も厄介なことの1つは、各スクリプトの最初に必要なインクルードの長いリストを書くことです(クラスごとに1つ)。

PHP 5ではこれはもう必要ありません。 spl_autoload_register()関数は任意の数のオートローダーを登録し、クラスおよびインタフェースが現在定義されていない場合に自動的にロードできるようにします。オートローダーを登録することにより、クラスまたはインターフェースがエラーで失敗する前にPHPに最終チャンスが与えられます。

0

あなたが見たもの、エラー__call

class MethodTest 
{ 
    public function __call($functionName, $arguments) 
    { 
     include 'Function/'.$functionName.'.php'; 
     return $functionName($arguments); 
    } 

} 


$obj = new MethodTest; 
$obj->myCustomFunc("myCustomParams") 
関連する問題