2009-11-24 12 views
7

Ich habe von der Funktion set_include_path() gelernt. Während dieser ganzen Zeit, definierte ich eine Konstante in der Datei config.phpmeinen eigenen BASE_PATH vs. set_include_path definieren?

define('BASE_PATH', '/var/www/mywebsite/public_html/'); 

Und in allen nachfolgenden PHP-Dateien, ich würde wie so

include(BASE_PATH.'header.php'); 
include(BASE_PATH.'class/cls.data_access_object.php'); 

Gibt es einen Vorteil mit dem konstanten Ansatz vs. der set_include_path Ansatz und umgekehrt? Ist der konstante Ansatz obsolet?

Antwort

5

Mit set_include_path() (oder ini_set ('include_path', ...)) können Sie mehrere Ordner angeben, die Ihren Bibliothekscode enthalten. Wenn Ihre Anwendung beispielsweise auf einer Vielzahl verschiedener Frameworks/Bibliotheken beruht, z. PEAR und Zend FW, könnte man so etwas wie,

ini_set ('include_path', '/ usr/local/php/Birne:/usr/local/php/zendfw') haben;

Der Nachteil dieses Ansatzes besteht darin, dass er die jeweils zuerst gefundene Datei verwendet; Wenn Sie eine Datei namens "Mailer.php" in mehr als einem Ihrer Include-Pfade haben, wird diese die erste enthalten, die sie findet, was zu kleinen Fehlern führt, wenn dies nicht Ihre Absicht ist. Eine gute Code-Organisation löst dieses Problem normalerweise. Außerdem geht include_path durch den Realpath-Cache (http://us2.php.net/realpath), der manchmal optimiert werden muss, um eine bessere Leistung abhängig von Ihrer Konfiguration zu erhalten.

Beide Möglichkeiten sind in Ordnung, jedoch ist die Verwendung der define() -Methode expliziter.

FWIW, verwende ich generell ini_set ('include_path', ...).

4

Ich denke, Micahel Erklärung ist sehr klar.

Ich empfahl Ihnen, "set_include_path" zu verwenden, wenn Sie alle Ihre PHP-Dateien in einem Ordner speichern, zum Beispiel: "libs /" (es ist einfacher). Die Verwendung der define() -Methode sollte schneller sein, da Sie den Dateipfad explizit angeben.

Versuchen Sie immer, absolute Pfade zu vermeiden, es sei denn, sie sind wirklich notwendig. fand ich sehr nützlich, um die Pfade auf diese Weise angeben:

define("BASE_PATH", dirname(__FILE__)); 

Auf diese Weise vermeiden Sie haben den Pfad jedes Mal, wenn Sie den Code bewegen zu aktualisieren.

+0

großartig! Ich habe gerade vor ein paar Tagen auch von dirname() gehört – John

Verwandte Themen