Использование spl_autoload () не в состоянии загрузить класс

StackOverflow https://stackoverflow.com/questions/3187192

  •  02-10-2019
  •  | 
  •  

Вопрос

Я играю с функциональностью автозагрузки SPL и, кажется, упускаю что -то важное, так как в настоящее время я не могу заставить его работать. Вот фрагмент, который я сейчас использую:

// ROOT_DIRECTORY translates to /home/someuser/public_html/subdomains/test
define('ROOT_DIRECTORY', realpath(dirname(__FILE__)));
define('INCLUDE_DIRECTORY', ROOT_DIRECTORY . '/includes/classes/');
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDE_DIRECTORY);
spl_autoload_extensions('.class.php, .interface.php, .abstract.php');
spl_autoload_register();

Когда я echo get_include_path() Я получаю путь, который ожидал:

// Output echo get_include_path();
.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/

Однако, когда я запускаю код, я получаю это сообщение об ошибке:

Фактальная ошибка: spl_autoload () [function.spl-autoload]: запрос класса не может быть загружен в/homome/someuser/public_html/subdomains/test/contact.php в строке 5

Request.class.php определенно в/home/someUser/public_html/subdomaines/test/incluct/classes/каталог.

Что мне не хватает?

Это было полезно?

Решение

Есть комментарий (анонимный) на http://www.php.net/manual/en/function.spl-autoload-register.php#96804 Это может относиться к вашей проблеме: spl_autoload_register (), похоже, не хорошо играет с Camelcase, и в вашем случае может попытаться найти request.class.php вместо запроса ...

Другие советы

Путь, по которому, как предполагается, класс, кажется, не соответствует пути, если вы ожидаете. Сравнивать

.:/usr/lib/php:/usr/local/lib/php:/home/someuser/public_html/subdomains/test/includes/classes/

с

/home/someuser/public_html/subdomains/test/

Разница в том, что ваш класс не в includes/classes/ Поскольку ваш SPL требует этого, кроме нескольких каталогов выше.

Я получил аналогичное сообщение об ошибке, но моя проблема была другой. Мое сообщение об ошибке выглядело

PHP Fatal error:  spl_autoload(): Class Lib\Lib\Regex could not be loaded in /dir1/dir2/lib/regex.php on line 49

Оказалось, я забыл удалить Lib\ от Lib\Regex Внутри самого определения класса корпорации. У меня было что -то вроде следующего:

namespace Lib;

class Regex {

...

   public static function match($pattern, $str) {

      $regex = new Lib\Regex($pattern);

      ...
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top