PHP __autoload Невозможно переопределить - PullRequest
3 голосов
/ 02 мая 2011

Я начал использовать функцию PHP __autoload, и теперь я получаю странную фатальную ошибку: не удается переопределить ошибки класса xxx.

Это странно, поскольку такие ошибки возникают в классах, которые я даже не загружаю с помощью функции автозагрузки. И я также использую require_once для включения файлов.

Я действительно озадачен этим. Кто-нибудь знает что-либо об ошибках такого рода при использовании автозагрузки?

Ответы [ 5 ]

6 голосов
/ 02 мая 2011

require_once / include_once смотрит только на имя файла, когда он пытается включить файл, а не на имя класса.Таким образом, вы можете иметь класс Foo как в Foo.php, так и в B.php, и тогда вы получите эту ошибку.

Я не уверен, как __autoload вызовет у вас какие-либо проблемы, если только __autoload требует Foo.php, потому что ему нужен класс Foo, а вам требуется B.php вручную, который переопределяет класс Foo.

Кстати, используйте spl_autoload_register вместо__autoload.

4 голосов
/ 22 февраля 2012

У меня была такая же ситуация ... все, что я изменил, было, и это работает для меня

include('xxx.php');

до

require_once('xxx.php');
0 голосов
/ 03 февраля 2018

Я не претендую на лучший ответ. Только мои мысли.

__ autoload () устарела в PHP 7.2 и, возможно, будет удалена.

Я нашел этот способ загрузки / включения файлов

//initialize a function which will upload files
function upload(){//you can call the function as you like
  //your path to files goes here
}

spl_autoload_register('upload')//specify the function, where you include your files(in this case it's upload function   
0 голосов
/ 03 мая 2011

Я нашел проблему.Видимо, когда он хотел включить класс Bank, он взял файл «bank.php» из текущего каталога ^^.Это просто страница банка, она должна содержать "src / model / Bank.php".Я удалил текущий каталог из списка поиска, и он был исправлен.

Поэтому всегда убедитесь, что функция автозагрузки включает в себя правильные файлы.Хорошей практикой также будет называть ваши файлы более простыми, например class.Bank.php или class.User.php вместо Bank.php или User.php.

Спасибо за вашу помощь и быстрый ответ в любом случае!

0 голосов
/ 02 мая 2011

У меня было это раньше, хотя я не уверен, что вызвало это.Убедитесь, что вы используете require_once / include_once вместо обычных версий для начинающих.Я думаю, что проблема была связана с использованием class_exists без указания пропустить автозагрузку (class_exists($name, false)) - вы делаете это?

...