3

为什么有函数spl_autoload_unregister?如果我在什么情况下注册自动加载器,我想取消注册它?对我来说似乎是多余的。

还有那个主题的另一个问题:既然现在 php 5.5 带有内置的 opcache,而且过去很多安装 apc - 有什么理由一起使用自动加载器吗?因为现在所有代码无论如何都会进入内存 - 只制作一个加载我所有 php 类的文件不是更好吗?

4

1 回答 1

2

您可以指定多个自动加载方法。因此,如果您的应用程序有很多自动加载方法,那么您也可能希望取消注册这些方法。在实践中,这种方法的存在可能更多是为了完整性(没有太多项目使用如此多的方法,以至于您想取消注册自动加载方法)。

操作码缓存是一个不同的主题。这与自动加载无关。当 PHP 被告知执行文件时,它首先解析文件并构建机器级指令代码(操作代码或操作码)。第二遍执行机器级代码。操作码缓存(APCZend Opcache等)只是存储机器级代码,因此您只需在下次调用该页面时执行它,从而为您自己节省额外的处理。

展开评论

您可以根据需要包含所有文件,但自动加载有两件重要的事情

  1. 您可以在命名空间中构建类,并使用文件和目录来镜像命名空间结构。这使您的类的工作变得非常容易,因为您可以快速判断每个类文件的位置
  2. 您仅在需要时包含文件

至于你的 opcache,你的想法是不正确的。假设您包括您使用的所有类和方法。现在,假设您有一个页面只使用了 25% 的代码库。这意味着您加载了其他 75% 并强制 opcache 对其进行缓存。但是为了什么目的?Opcache 在逐个文件的基础上工作,而不是在项目级别的基础上工作。所以你会在每一页上膨胀你的代码而没有任何收获,因为自动加载无论如何都会包含你需要的代码,但是是动态的。

于 2013-11-24T22:37:33.737 回答