php类自动加载 - 似乎是缓存?

时间:2013-01-23 16:45:14

标签: php autoload

我最近在我的php代码中实现了以下代码来自动加载类:

function my_autoloader($class) {
    include 'classes/class_' . $class . '.php';
}
spl_autoload_register('my_autoloader');

代码包含在文件中,该文件包含在需要生成网页的所有文件的顶部。然后我开始从我的代码中删除require_once调用。这是一个例子:

require_once('classes/class_web_page.php');

正如您可能从上面收集的那样,我网站上的各个页面(这是一个在线社区,所以有一个论坛,图库等)都使用web_page类生成页面标题,菜单等。各个部分代码创建web_page对象,设置各种参数以确定需要哪些菜单选项等,为页面提供一些内容,并生成html。

在我对class_web_page.php文件进行更改之前,一切似乎都很好。这个变化在网站的大部分地方都很明显......主页除外。

我刷新了我的浏览器,如果再打开则切换:-)尝试调用http://www.terragenesis.co.uk/index.php而不仅仅是http://www.terragenesis.co.uk/,甚至停止并重新启动服务器上的apache。尽管如此,主页上还没有显示更改。最后我将require_once行放回index.php ...并且presto嘿:我在class_web_page.php中所做的更改出现在主页上。

所以在我看来,自动加载器正在加载一个class_web_page.php的缓存副本,没有任何东西,甚至没有重启Apache,都会说服它获得新版本。为什么它应该为主页而不是其他页面执行此操作...我不知道。

还有其他人经历过这个吗?我是否对自动加载器代码做错了什么?我该如何修复它?或者我是否必须将所有require_once语句放回原位? : - (

我的服务器有PHP版本5.1.6

1 个答案:

答案 0 :(得分:1)

我找到了这个问题的答案......和往常一样,“臭虫”几天躲过了我,事实证明我做了一件非常愚蠢的事情:

事实证明,在过去的某个时刻,我不小心将class_web_page.php的副本上传到了站点主目录而不是classes子目录。所以它存在两次。

所以,看起来尽管我的自动加载器告诉php查看classes子目录,它会首先看到与主脚本相同的目录(在我的站点主页的情况下是index.php)。所有其他网站页面脚本都在子目录(论坛,图库等)中,所以他们使用/classes/class_web_page.php“正确”了

我现在删除了生活在主目录中的class_web_page.php副本......一切正常。