PHP中后期静态绑定的实际示例


Practical examples of late static binding in PHP?

我了解后期静态绑定的工作原理,但我似乎无法确定何时使用它。PHP网站上的示例很好,但没有显示任何实际的用法。我只是想知道是否有任何例子表明LSB对于解决问题是绝对必要的,或者它何时有助于简化潜在的复杂代码。

它可以用于创建静态工厂模式,使用带有静态方法重载的后期静态绑定来防止需要额外的繁琐工厂类,例如:

class MyObject {
    public static function createInstance($typeA = true) {
        if ($typeA) {
            return static::createInstanceA();
        }else{
            return static::createInstanceB();
        }
    }
    protected static function createInstanceA() {
        return new MyObject(...);
    }
    protected static function createInstanceB() {
        return new MyObject(...);
    }
}

class MyObjectDebug extends MyObject {
    protected static function createInstanceA() {
        return new MyObjectDebug(...);
    }
}

当然,如果你喜欢这种东西的话。

LSB在扩展类时非常重要。它允许您使用static::来引用名为类的的成员,而self::专门引用它所使用的类。基本上,LSB允许您重写基类中的静态方法。