2016-07-29 7 views
-1

Ich weiß, das ist eine total abartige Art von Frage, aber ich bin total verwirrt und ich weiß nicht, wie man eine Datei einfügt, wenn eine Funktion in php aufgerufen wird.Wie man eine Datei einbezieht, wenn eine Funktion in php aufgerufen wird

Zum Beispiel habe ich einen Verzeichnisnamen als Funktion, die 100 von Datei mit dem Funktionsnamen wie myfunction.php und diese Datei myfunction() ist enthalten;

so, wenn ich diese Funktion genannt wie

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 

ist es eine Möglichkeit, Datei automatisch aufzunehmen. bitte schlagen Sie mir einen Weg vor.

+0

was Sie Fehler gesehen? Wenn es eine gültige Datei namens '$ functionName' im' Function'-Verzeichnis gibt, dann sollten Sie kein Problem haben. – Umair

+0

Es gibt keine Möglichkeit, eine include.php zu erstellen, die alle erforderlichen Includes enthält Ruf das an. Die Funktion wird nicht automatisch eingeschlossen, wenn $ functionName über der Include-Zeile deklariert ist. – Danimal

+0

* "wenn eine Funktion aufgerufen wird" * - 'function myfunction() {include here}' und die Funktion aufrufen - wenn es sich um die Frage handelt. TBH, es fällt mir schwer, mich mit Ihrer Frage zu beschäftigen. –

Antwort

2

Beim Aufrufen einer nicht definierten Funktion wird ein nicht definierter Fehler ausgelöst, der die Ausführung anhält, wenn dies geschieht. Selbst wenn Sie den Fehler abfangen könnten, könnten Sie die Funktionsausgabe nicht an die ursprüngliche Variable zurückgeben.

Meine Empfehlung, umfassen alle Funktionen am Anfang der Seite:

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

Andernfalls würden Sie so etwas zu tun haben, manuell für jeden Anruf:

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

konnte Sie Erstellen Sie jedoch eine benutzerdefinierte Funktion, die das tun würde:

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); 
} 

Sie müssten dann Rufen Sie Ihre Funktionen mit myFunction('testFunction', $param1, $param2).

Wenn Sie Klassen laden, wird dies einfacher. Sie können PHP autoloading verwenden, um diese Aufgabe zu erfüllen:

Viele Entwickler, die objektorientierte Anwendungen schreiben, erstellen eine PHP-Quelldatei pro Klassendefinition. Einer der größten Ärgernisse ist das Schreiben einer langen Liste von benötigten Includes zu Beginn jedes Skripts (eines für jede Klasse).

In PHP 5 ist dies nicht mehr notwendig. Die Funktion spl_autoload_register() registriert eine beliebige Anzahl von Autoloadern, wodurch Klassen und Schnittstellen automatisch geladen werden können, wenn sie derzeit nicht definiert sind. Durch das Registrieren von Autoloadern erhält PHP eine letzte Chance, die Klasse oder die Schnittstelle zu laden, bevor sie mit einem Fehler fehlschlägt.

0

Sie können versuchen, Verfahren Überlastung zu verwenden, __call

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

} 


$obj = new MethodTest; 
$obj->myCustomFunc("myCustomParams") 
Verwandte Themen