PHP:spl_autoload_register的好处是什么?包含文件的性能。

9
我一直在研究使用spl_autoload_register函数代替require, require_once, include, 和include_once。虽然有很多关于如何实现它的讨论,但是文档并不太详细,并没有解释这种方法与原有方法相比的优劣之处。
参考文献:http://php.net/manual/en/function.spl-autoload-register.php 我想知道spl_autoload_register是如何工作的?
使用spl_autoload_register是否会影响性能?
当存在多个需要交叉引用的类(超过20个)时,它如何处理?(这样做是否仍会导致重复的引用?)

@DaveRandom 我在所有的类中都使用require_once,但是require_once语句和类实例都是在脚本页面顶部创建的。使用spl_autoload_register有什么不同之处? - mlishn
1
@DaveRandom:我不同意。include_oncerequire_once指令不仅性能较差,更重要的是它们促进了松散的组织和架构。 - FtDRbwLXw6
@drrcknlsn "他们会促进松散的组织和架构" - 为什么?我的意思是,我认同代码应该设计成这样,以至于人们永远不会试图多次加载类文件,但知道有保障也很好。 - DaveRandom
@mlishn:当你需要一个文件时,使用require。我个人在我的项目中总是使用PSR-0自动加载,这可以消除99.9%的手动require需求。 - FtDRbwLXw6
@drrcknlsn,你能发一个例子吗?我对所有选项都持开放态度。我需要偏离在脚本顶部包含大量require_once语句的方式。 - mlishn
显示剩余3条评论
1个回答

8

我从未测试过(也不担心)性能,但我总是使用自动加载器,因为它可以让你的生活变得更加轻松。

有关实现,请参见:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

当您尝试访问一个类(例如Foo),而该文件尚未加载时,自动加载程序将启动并尝试加载与该类相关联的文件。

这可以通过“正确”组织项目中的文件来轻松完成。假设您有一个类\Project\Http\Client(或“旧式”非命名空间Project_Http_Client),它将尝试加载文件:Project/Http/Client.php


如果类实例在脚本顶部被创建,那么它是如何工作的? - mlishn
但这不是和在脚本顶部使用 require_once 几乎等价吗?我试图限制从类到类的重复 require_once 语句的数量。 - mlishn
不需要重复注册自动加载器,只需注册一次即可,它会为您要求所有文件。否则,您将不得不为您尝试加载的每个类使用“require”。 - PeeHaa
如果您使用正确的PSR-0自动加载并遵循文件系统上的类文件组织惯例,那么您几乎永远不需要手动要求一个类文件。 - FtDRbwLXw6
我需要在一个自动加载中包含所有需要的类吗? - mlishn
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接