如何将PHP特征限制为某些类

时间:2014-07-13 11:12:57

标签: php traits

我有以下特点:

trait ARCacheableTrait
{
    public function instantiate() {
        // this will need to call some ActiveRecord methods using parent::
    }
}

它的目的是覆盖instantiate类的ActiveRecord方法。确保它仅适用于此类的正确方法是什么?如果有人试图将它添加到没有或不扩展ActiveRecord甚至更好的类中,我想抛出异常,通过抛出编译时错误确保类型安全...

1 个答案:

答案 0 :(得分:8)

您可以做的最好的事情是使用abstract方法定义对参展商提出要求:

trait ARCacheableTrait {

    public function instantiate() {
        parent::foo();
    }

    abstract public function foo();

}

这迫使展览类实施方法foo,以确保特征可以调用它。但是,没有办法限制特征仅在某个类层次结构中展示。如果您需要,您可能希望实现ActiveRecord的特定子类,该子类实现此特定instantiate行为,而不是使用特征。