Определить мой собственный BASE_PATH против set_include_path?
Я узнал о функции set_include_path(). Все это время я определял константу в файле config.php
define('BASE_PATH', '/var/www/mywebsite/public_html/');
И во всех последующих php-файлах я бы включил вот так
include(BASE_PATH.'header.php');
include(BASE_PATH.'class/cls.data_access_object.php');
Есть ли какое-то преимущество в подходе с константой по сравнению с подходом set_include_path и наоборот? Постоянный подход устарел?
2 ответа
Использование set_include_path() (или ini_set('include_path', ...)) позволяет вам указать несколько папок, которые будут содержать код вашей библиотеки. Например, если ваше приложение опирается на различные фреймворки / библиотеки, например, PEAR и Zend FW, у вас может быть что-то вроде:
ini_set('include_path', '/usr/local/php/pear:/usr/local/php/zendfw');
Недостатком этого подхода является то, что он будет использовать любой файл, который он найдет первым; если у вас есть файл с именем "Mailer.php" более чем в одном из ваших путей включения, он будет включать первый найденный файл, вызывая незначительные ошибки, если вы этого не планируете. Хорошая организация кода обычно решает эту проблему. Кроме того, include_path проходит через кеш реального пути ( http://us2.php.net/realpath), который иногда необходимо настроить для повышения производительности в зависимости от ваших настроек.
Оба способа хороши, однако использование метода define() более очевидно.
FWIW, я обычно использую ini_set('include_path', ...).
Я думаю, что объяснение Микаэля очень ясно.
Я рекомендовал вам использовать "set_include_path", когда вы храните все ваши PHP-файлы в папке, например: "libs/" (это проще). Использование метода define() должно быть быстрее, поскольку вы явно указываете путь к файлу.
Всегда старайтесь избегать использования абсолютных путей, если они действительно не нужны. Я нашел очень полезным указать ваши пути таким образом:
define("BASE_PATH", dirname(__FILE__));
Таким образом, вам не придется обновлять путь при каждом перемещении кода.