1
5
在以下情况下,我需要LSB:
如果您想了解更多有关主题的信息: |
2
5
后期静态绑定的一个主要需求是一组静态实例创建方法。 这个 DateAndTime class 是我从smalltalk/squak移植到PHP的时序库的一部分。使用静态实例创建方法可以创建具有各种参数类型的实例,同时保持静态方法中的参数检查,以使库的使用者无法获取完全有效的实例。 在这种情况下,后期静态绑定很有用,因此这些静态实例创建方法的实现可以确定调用最初针对的类。以下是用法示例: 与LSB:
如果没有后期的静态绑定,[在我当前的实现中]每个类必须实现每个实例创建方法,如本例中所示: 没有LSB:
随着实例创建方法和类层次结构的数量的增加,方法的重复将成为一个真正的难题。LSB减少了这种重复,允许更干净和更直接的实现。 |
3
3
当:
如果只获得1和2,您将使用普通的实例方法。所以亚历克斯的问题(见他对这个问题的回答)不需要LSB。 典型的情况是对象创建,其中子类以不同的方式创建自己,但使用相同的参数。显然,您没有要调用的实例,因此创建方法(也称为工厂方法)必须是静态的。然而,您希望它的行为因子类而异,所以普通的静态方法是不正确的。请看亚当·弗朗哥的答案。 |
4
1
如果需要访问子类中没有重载的方法中的重载静态属性/方法,则需要后期静态绑定。一个简单的例子: paste2.org
典型的例子是来自Rails的ActiveRecord类,如果您尝试在PHP中实现类似的东西,它看起来像这样:
|
5
1
假设在简化的对象关系映射器中有表示表(行实例)的类。 您将拥有一个类“用户”和一个类“公司”,其实例表示各自表的行。 用户和公司将从一些基本抽象类继承,比如说“baseobject”,它将具有一些常见的方法,如save()、delete()、validate()等… 如果要存储有关验证和表定义的数据,最好的位置是每个派生类中的静态变量,因为验证和表定义对于每个用户实例都是相同的。 如果没有lsb,baseObject中提到的validate()方法将没有对用户和公司中定义的静态变量的引用,即使您是通过用户的实例调用它。它将在BaseObject类中查找相同的静态变量,并将引发错误。 这是我在php 5.2.8上的经验-lsb将在5.3中介绍 |
6
0
我有一个用静态方法处理某些格式的类。我有另外一个类,除了它如何处理格式之外,它还需要原始类的所有功能。 |
Jacco · 未能格式化我的日期以在php中正确工作 1 年前 |
jay ram · 如何在URL核心php中从API获取JSON? 1 年前 |
Ishwarya A · php电子表格在浏览器中显示多张excel 1 年前 |