set_include_path () Может кто-нибудь поправить меня - PullRequest
1 голос
/ 19 декабря 2011

Я был на сайте по этой теме, но я все еще в замешательстве.Я исправил свою проблему, но в глубине души я знаю, что меня обманули, и это исправление может привести к дальнейшим проблемам.Позвольте мне объяснить, где я нахожусь:

Вот папка с такой структурой каталогов, как эта >> [имя папки]:

/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, с которой я исправил временную ошибку:

set_include_path("./");
set_include_path("../");

Теперь позвольте мне указать, что это мой первый большой проект, решивший отказаться от процедурного кодирования, и это мой первый реальный опыт работы с автозагрузкой.Вместо того, чтобы быть копировщиком, мне действительно нужно лучше это понять;Я почувствовал пробел в моем понимании.Помимо исправления кода, кто-нибудь любезно объяснит, что делает правильный код, поскольку я попробовал несколько «решений», но я все еще получаю странные результаты после подражания примерам других людей.

Любовь и поцелуи Энди

1 Ответ

0 голосов
/ 19 декабря 2011

Если вы действительно хотите изменить путь включения, используйте его следующим образом:

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.

...