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