我有以下特点:
trait ARCacheableTrait
{
public function instantiate() {
// this will need to call some ActiveRecord methods using parent::
}
}
它的目的是覆盖ActiveRecord类的实例化方法.确保它仅适用于此类的正确方法是什么?如果有人试图将它添加到没有或不扩展ActiveRecord的类或更好的类,我想抛出异常,通过抛出编译时错误来确保类型安全…
解决方法:
您可以做的最好的事情是使用抽象方法定义对参展类别施加要求:
trait ARCacheableTrait {
public function instantiate() {
parent::foo();
}
abstract public function foo();
}
这迫使参展类实现方法foo,以确保特征可以调用它.但是,没有办法将特征限制为仅在某个类层次结构中展示.如果您需要,您可能希望实现ActiveRecord的特定子类,该子类实现此特定实例化行为而不是使用特征.