在PHP中使用自动加载是不是很糟糕?

时间:2009-09-10 22:23:32

标签: php oop autoload

来自php.net

  

在PHP 5中,不再需要这样做。您可以定义一个__autoload()函数,如果您尝试使用尚未定义的类/接口,则会自动调用该函数。通过调用此函数,在PHP失败并出现错误之前,脚本引擎将获得加载类的最后机会。

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

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

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:8)

Autoload是一种只加载所需类的好方法。

在PHP 5> = 5.1.2中,由于spl_autoload_register(),旧的__autoload()的大多数问题都消失了。

答案 2 :(得分:4)

  

现在我想知道,单独使用__autoload在动态网站上加载相应的类是不好的做法吗?

完全没有。你可以依靠自动加载,你需要做的就是设计一个好的命名约定并实现一个高效的自动加载器。

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

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

  

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

答案 3 :(得分:3)

__autoload()的唯一危险是你定义了一个糟糕的自动加载功能。一般来说,所有你将获得的性能损失是一些磁盘搜索,因为PHP寻找包含您的类的正确文件。好处是摆脱了所有那些烦人的include()电话。

如果你担心这个级别的性能,那么你应该已经在使用像APC这样的操作码缓存。