Определить мой собственный 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__));

Таким образом, вам не придется обновлять путь при каждом перемещении кода.

Другие вопросы по тегам