懒加载?避免使用它会更好吗?

7

我刚刚了解了“惰性加载”设计模式。

过度使用惰性加载来加载所有类并完全忘记include(..),这样做是否可行?
这种方法的缺点是什么?

3个回答

8

关于自动加载的几点说明:

  1. 相较于一直包含所有文件(特别是文件数量越来越多时),使用自动加载会带来很好的性能提升。

  2. 在实现自动加载时,最好使用spl_autoload_register()而不是__autoload()

虽然很多时候当人们谈论PHP中的延迟加载时,他们指的是像下面这样的东西:

class Foo {
    protected $bar = null;

    public function getBar() {
        if ($this->bar == null) {
            $this->bar = ExpensiveOperation();
        }
        return $this->bar;
    }
}

只有在实际需要使用属性时才加载它,而不是每次实例化对象时都加载,这可能会带来一些好处。


3

懒加载器的一个好处是,在脚本执行期间它只会加载实际需要的类文件,可能会节省内存;否则你可能会包括所有的类文件,无论是否需要。根据你的脚本,这可能会有很大的影响。


这绝对是“懒加载器”的最大优势吧? - Will Vousden
@Will - 另一个主要的好处是不需要长长的包含列表,并且每当您添加新类时都必须将其添加到列表中,这是一个次要的好处;但是内存/性能提升无疑是主要的好处。此外,它还可以防止include_once的开销,同时无需担心重复的包含。 - Mark Baker

2

使用显式包含或者让__autoload()为您找到类都是可以的,两种方法都可以。

但我不建议混合使用这两种策略。这样include行就变得多余了。


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