2009-04-09 12 views
2

Ich möchte meine Funktion verwenden, zum Beispiel DebugR(), aber ich möchte kein Require oder Include (mit include_path) verwenden, um die Funktionsdatei zu laden, die die Quelle enthält.Wie verwendet man die PHP-Funktion ohne Ladequelldatei?

Ich weiß, ich könnte ein Autoload verwenden, aber diese Aktion muss in meiner PHP-Konfiguration generisch sein. Ich denke, ich muss eine PHP-Erweiterung erstellen, aber gibt es einen anderen Weg?

+0

Danke Jim Puls, werde ich erinnere mich, wie bearbeiten futurs Fragen –

Antwort

5

Es gibt eine PHP-Konfigurationslinie, die Sie tun können.

Die Dokumentation sagt dies:

auto_prepend_file String

Specifies the name of a file that is automatically parsed before the main file. The file is included as if it was called with the require() function, so include_path is used. 

The special value none disables auto-prepending. 
0

Ohne die Erweiterung zu erstellen oder eine Klasse von Funktionen automatisch zu laden oder direkt die Funktion in die Seite zu schreiben oder die Funktion in die gleiche Datei zu schreiben, bin ich ziemlich sicher, dass es keinen Weg gibt, PHP anzupassen Aufbau.

Aus Neugier, was sind die Gründe dafür, nichts von diesen Dingen zu wollen?

0

Warum nicht einen Beschleuniger verwenden, der den Code als BC im Speicher zwischenspeichert?
Sie müssen noch die "include" -Direktive schreiben.
Wenn Erweiterung ist, wo Sie gehen, dann Gabel von einem der verfügbaren Open-Source-Beschleuniger da draußen.

0

Der einzig gangbare Weg, das zu tun ist autoloads wie folgt zu verwenden:

// your_file.php 
function __autoload($class) 
{ 
    require_once('./classes/' . $class . '.php'); 
} 

echo _::Bar(); 
var_dump(_::DebugR()); 
echo _::Foo(); 

// ./classes/_.php 
class _ 
{ 
    function Bar() 
    { 
     return 'bar'; 
    } 

    function DebugR() 
    { 
     return true; 
    } 

    function Foo() 
    { 
     return 'foo'; 
    } 
} 

Natürlich würde jede Funktion sein in dieser _ Klasse gespeichert.

Eine weitere Alternative, wenn Sie arbeiten innerhalb eines Objekts ist die __call() magische Methode zu verwenden und so etwas wie:

return $this->DebugR(); 
+0

" Ich weiß, ich könnte ein Autoload verwenden, aber diese Aktion muss generisch sein " Ich möchte nicht automatisch laden. Lesen Sie die gewählte Antwort, es ist die beste Antwort des Problems. –

Verwandte Themen