PHP __autoload性能

CoC*_*oMo 8 php autoload

我有一个脚本,用于autoload加载未找到的类.我没有故意包含该文件(尽管我可以),但我希望自动加载功能包含所需的文件.

因为脚本可以是递归的,即如果类已经加载,我不想检查相应的文件是否已加载以及是否class_exists在每次递归脚本时.

Art*_*cto 9

如果你想避免__autoload,你可以使用require_once而不是include.

使用的性能损失__autoload可能相当大,特别是因为某些操作码缓存不能正确支持它.但是,鉴于它非常方便,除非您的操作码缓存不缓存自动加载包含,否则我会说使用它.

  • @alex除非绝对必要(我很少这样做),否则我更喜欢引导人们从`include`开始.作为一个在文件不存在时或多或少地无声地失败的构造,它被偷走了我几个小时的生命. (4认同)
  • 通常使用`__autoload` /`spl_autoload_register`是一个性能*增益*,因为你只需要加载你需要的类,而不是必须加载所有东西+厨房水槽,以防你需要它. (2认同)

Bre*_*ker 6

如果您的自动加载器已设置为加载类并且未使用require(等等),则只有在引用的类不存在时才会调用自动加载器.因此,永远不需要检查class_exists自动加载器(如果类存在,则不会调用它).

关于表现.如果您使用大型库,自动加载实际上可以更快,因为它只加载所需的文件/类.无论哪种方式,速度命中在我的经验中几乎可以忽略不计(总是使用操作码缓存,正如其他人提到的那样).