PHP __autoload无法重新声明

时间:2011-05-01 23:51:28

标签: php autoload

我开始使用PHP __autoload函数,现在我得到那些奇怪的致命错误:无法重新声明类xxx错误。

这很奇怪,因为这些错误发生在我甚至没有加载自动加载功能的类上。我还使用require_once来包含文件。

我真的对此感到困惑。使用自动加载时,任何人都知道这种错误吗?

5 个答案:

答案 0 :(得分:6)

require_once / include_once仅在尝试包含文件而不是类名时查看文件名。所以你可以在Foo.php和B.php中都有类Foo,然后你就会得到那个错误。

我不确定__autoload会如何导致任何问题,除非__autoload需要Foo.php,因为它需要类Foo,并且您需要手动使用B.php重新定义类Foo

顺便说一句,请使用spl_autoload_register代替__autoload

答案 1 :(得分:4)

我有同样的情况..所有我改变的是它为我工作

include('xxx.php');

require_once('xxx.php');

答案 2 :(得分:0)

我之前已经有了这个,不知道是什么造成的。确保您使用require_once / include_once而不是普通版本的初学者。我认为问题与使用class_exists而不告诉它跳过自动加载(class_exists($name, false))有关 - 你这样做了吗?

答案 3 :(得分:0)

我发现了问题。显然,当它想要包含Bank类时,它从当前目录^^获取了“bank.php”文件。这只是银行页面,它应该包含“src / model / Bank.php”。我从搜索列表中删除了当前目录,并且已修复。

因此,请务必确保自动加载功能包含正确的文件。好的做法是将文件命名为class.Bank.php或class.User.php,而不是Bank.php或User.php。

感谢您的帮助和快速回复!

答案 4 :(得分:0)

I am not pretend on the best answer. Just my thoughts.

__autoload() is deprecated in PHP 7.2 and will be possiblly deleted.

I found this way to upload/include files

//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