如何创建允许加载对象的界面?

时间:2013-05-28 18:12:23

标签: php interface static

我创建了一个由用户实现的界面。我唯一真正的要求是用户实现了Save()和Load()方法。现在保存很简单,但我遇到的问题是Load()。

为了使Load()成为接口的一部分,它需要是一个实例方法。但它的本质是返回一个从数据库加载的新对象。这意味着Load()需要定义为static。接口不强制执行静态方法。

我如何要求实现该接口的用户为Load()编写自己的代码?

我正在使用PHP5.4,它确实要求在子类中遵循构造函数定义,因此我们想到将其更改为抽象类并定义一个带有$ id变量的构造函数。如果它是null我们创建一个新对象,如果已设置,则加载该对象。我更喜欢将此设置保留为界面。还有一些关注模糊和一些用户错误地实现其构造函数的问题。记录和描述load()应该做什么更容易。

1 个答案:

答案 0 :(得分:1)

为什么“返回对象的方法”会立即意味着它必须是静态的?静态不是对象创建的一个“首选” - 它实际上是为特定目的服务的。

反正。如果你的心愿意的话,没有什么能阻止你定义一个需要实现静态方法的接口,如下所示:

interface MyTestInterface {
   public static function Load();
}
class MyTest implements MyTestInterface {
   public static function Load() { 
       echo "Test";
   }
}

小提琴:http://codepad.viper-7.com/xcoQZh

当方法是静态的时候,没有什么能阻止你定义一个需要实现的方法,通过接口或抽象类。但是,请考虑在这种情况下实际使用static ....