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

ddi*_*hev 6 php traits

我有以下特点:

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

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

dec*_*eze 10

您可以做的最好的事情是使用abstract方法定义对参展类别施加要求:

trait ARCacheableTrait {

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

    abstract public function foo();

}
Run Code Online (Sandbox Code Playgroud)

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