6

来自php.net

在 PHP 5 中,这不再是必需的。您可以定义一个__autoload()自动调用的函数,以防您尝试使用尚未定义的类/接口。通过调用此函数,脚本引擎在 PHP 因错误而失败之前获得了最后一次加载类的机会。

现在我想知道,仅使用__autoload在动态站点上加载适当的类是不好的做法吗?

我的网站设置方式是将文件包含到index.php文件中,例如http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

因此,如果我在我网站的论坛部分或博客部分,我只想加载适当的类和函数,所以我使用自动加载但我从不手动包含文件,我应该__autoload作为最后的手段使用还是什么即使在高流量系统上我也做得很好?

4

4 回答 4

9

坏的?No.__autoload()是我最喜欢的 PHP 5 新增功能之一。它消除了手动必须包含/要求应用程序所需的类文件的责任(和烦恼)。话虽如此,作为开发人员,您需要确保只加载“适当的类”。这可以通过结构化的命名方案和目录结构轻松完成。网上有很多关于如何正确使用 __autoload() 的例子,谷歌搜索一下,你会发现很多信息。

于 2009-09-10T22:27:34.373 回答
8

自动加载是只加载需要的类的好方法。

在 PHP 5 >= 5.1.2 中,旧的 __autoload() 的大部分问题都消失了,这要归功于spl_autoload_register()

于 2009-09-10T22:30:18.703 回答
4

现在我想知道,仅使用 __autoload 在动态站点上加载适当的类是不好的做法吗?

一点也不。你可以依赖自动加载,你需要做的就是设计一个好的命名约定并实现一个高效的自动加载器。

有一个主要问题需要考虑。Autoloading 和 Zend Guard 不能很好地配合使用,因为 Zend Guard 倾向于重命名事物,这意味着您决定使用的命名约定很可能不会相同。如果您将使用 Zend Guard(或任何其他混淆器),您很可能会被迫手动包含所有文件。

以下是 Zend Guard 用户指南的引述:

自动加载类将不起作用,因为磁盘上的文件名与混淆的类名不匹配。

于 2009-09-10T22:45:48.850 回答
3

__autoload() 唯一的危险是如果你定义了一个糟糕的自动加载函数。通常,就性能损失而言,您将获得的只是一些磁盘搜索,因为 PHP 会查找包含您的类的正确文件。好处是摆脱了所有那些烦人的include()电话。

如果您担心此级别的性能,那么您应该已经在使用操作码缓存,例如 APC。

于 2009-09-10T22:45:40.710 回答