我开始使用PHP __autoload函数,现在我得到那些奇怪的致命错误:无法重新声明类xxx错误。
这很奇怪,因为这些错误发生在我甚至没有加载自动加载功能的类上。我还使用require_once来包含文件。
我真的对此感到困惑。使用自动加载时,任何人都知道这种错误吗?
答案 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