__autoload混淆了?

时间:2009-08-13 08:22:36

标签: php autoload spl

我有一个服务器上有很多客户,当我开发时,我包含了我的init.php,其中我有__autoloader()函数,其中包含例如dir_name(__FILE__)."/classes/".$className的文件。

但是昨天我看到服务器找不到特定的类,我重新启动apache然后再次工作。

每个客户都有自己的init.php ...(因此在同一台服务器上有很多__autoloads)

customer1/init.php            : holds __autoload()
customer1/classes/class.php

customer2/init.php            : holds __autoload()
customer2/classes/class.php

我还没有做过一些测试,我希望有人可以在我尝试重现问题之前回答我的问题,但是你认为当你在同一时间收到2个或更多请求时,php可能会采取错误的自动加载功能时间?

spl_autoload_register是解决方案吗?

非常感谢你的一些想法或头脑风暴。

2 个答案:

答案 0 :(得分:2)

我的猜测是你的任何一个__autoload()函数都应该输入错误,或者你包含了错误的init.php文件。

此外,dir_name()不存在,您应该将其更改为dirname(),或者如果您使用的是PHP> =也可以使用新的DIR constant获得相同的效果5.3。

编辑:根据您的评论,请使用:

require(realpath(dirname(__FILE__)) . '/classes/' . $className);

require(realpath(__DIR__) . '/classes/' . $className);

答案 1 :(得分:0)

每个PHP请求都是完全独立的,实际上你不可能在同一个PHP请求中有两个名为__autoload()的函数,所以它们不能干涉。可能的问题:

  • 您包含了错误的客户init.php
  • 您忘记包含init.php文件,在这种情况下,根本没有没有自动加载。
相关问题