set_include_path() Может кто-нибудь поправить меня
Я был на сайте по этому вопросу, но я все еще в замешательстве. Я исправил свою проблему, но в глубине души я знаю, что меня обманули, и это исправление может вызвать проблемы в дальнейшем. Позвольте мне объяснить, где я нахожусь:
Вот структура каталогов папок, как это >> [имя папки]:
/site root
[ajax-loads]
showorder.php
[bcls] << For bespoke classes
class.order.php
[cls] << For classes
class.main.php
class.db.php
class.sql.php
...
...
dashboard.php
index.php
config.php
...
.. etc etc
Итак, выше я показываю, что у меня есть 2 папки, которые содержат классы для использования, большинство из которых вызываются с помощью __autoload в class.main.php. Проблема у меня возникает, когда я использую jQuery для "загрузки" нового содержимого в div; поведение меняется, и путь к автоматической загрузке относится к файлу ajax-load, а не к class.main.php. На данный момент у меня есть следующий код, где я чувствую, что обманул, так сказать.
//PATHS & AUTOLOAD
set_include_path("./cls");
set_include_path("../cls");
set_include_path("./bcls");
set_include_path("../bcls");
//INVESTIGATE THIS NONESENSE ABOVE!
function __autoload($class_name)
{
require_once 'class' . '.' . $class_name . '.' . 'php';
}
Ранее в файле у меня возникла та же проблема с моим файлом config.php, которую я исправил с помощью temp:
set_include_path("./");
set_include_path("../");
Теперь позвольте мне отметить, что это мой первый большой проект, решивший отказаться от процедурного кодирования, и это мой первый реальный опыт работы с автозагрузкой. Вместо того, чтобы быть копировщиком, мне действительно нужно лучше это понять; Я почувствовал пробел в моем понимании. Помимо исправления кода, кто-нибудь любезно объяснит, что делает правильный код, поскольку я попробовал несколько "решений", но я все еще получаю странные результаты после подражания примерам других людей.
Любовь и поцелуи Энди
1 ответ
Если вы действительно хотите изменить путь включения, используйте его следующим образом:
define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']);
// ...
set_include_path(
BASE_PATH . '/bcls' .
PATH_SEPARATOR . BASE_PATH . '/cls' .
PATH_SEPARATOR . get_include_path() .
PATH_SEPARATOR . '.'
);
Хотя я бы порекомендовал вам переименовать ваши папки. Настоятельно не рекомендуется сокращать переменные, классы, функции, папки и т. Д. Рассматривали ли вы использование фреймворка PHP какой-то? Это может помочь вам в ваших усилиях, и вы можете не изобретать велосипед.
Если вы хотите легкий вес, то подумайте об использовании Kohana или CodeIgniter. В противном случае я рекомендую Zend Framework.