jced-artem/lazy-loading

使用引用属性和闭包实现的快速简单的懒加载特性

1.0.1 2016-12-15 22:55 UTC

This package is not auto-updated.

Last update: 2024-09-29 01:58:21 UTC


README

使用引用属性和闭包实现的快速简单的懒加载特性

您无需再编写类似代码来实现懒加载

class ObjectFactory
{
    private $object;
    
    public function getObject()
    {
        if (empty($object)) {
            $this->object = new stdClass();
        }
        return $this->object;
    }
}

实际上,您也不必记住在哪里需要使用 empty()is_null()$x === false

只需使用 LazyTrait

class ObjectFactory
{
    use \Jced\LazyTrait;
    
    private $object1;
    private $object2;
    private $object3;
    private $object4;
    private $object5;
    
    public function getObject1()
    {
        // assert empty by default
        return $this->lazy($this->object1, new stdClass());
    }
    
    public function getObject2()
    {
        // assert empty by default
        return $this->lazy($this->object2, function() {
            return new stdClass();
        });
    }
    
    public function getObject3()
    {
        // assert is_null
        return $this->lazy($this->object3, new stdClass(), false, true);
    }
    
    public function getObject4()
    {
        // assert is false
        return $this->lazy($this->object4, new stdClass(), false, false, true);
    }
    
    public function getObject5()
    {
        // assert is false or empty or is_null
        return $this->lazy($this->object5, new stdClass(), true, true, true);
    }
}

安装

composer require jced-artem/lazy-loading

注意

请注意,如果您将对象作为 'return' 参数传递,您将获得引用。如果您需要防止这种情况,请使用 newclone