我最近实现了以下代码来在我的 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 中……然后马上嘿:我在 class_web_page.php 中所做的更改出现在主页上。
所以在我看来,自动加载器正在加载 class_web_page.php 的缓存副本,并且没有任何东西,甚至没有重新启动 Apache,都无法说服它获取新版本。为什么它应该为主页而不是其他页面这样做......我不知道。
有没有其他人经历过这个?我对自动加载器代码做错了吗?我该如何解决它......还是我必须将所有 require_once 语句放回原处?:-(
我的服务器有 PHP 版本 5.1.6