是否有一个有效的Docblock标记可以让特征知道它将与哪个类/接口一起使用?例如(以下纯属虚构代码(。
interface Authenticatable {
public function getId();
}
class User implements Authenticatable {
use HasAvatar;
}
class Admin implements Authenticatable {
use HasAvatar;
}
trait HasAvatar {
public function getAvatarUrl() {
return AvatarService::getAvatarUrlForId(
$this->getId()
);
}
}
您可以看到HasAvatar
特性从父类访问getId()
。
然而,当您在IDE中时,它找不到getId()
,因为它不属于特性,并且没有注释提示来说明在哪里可以找到这个方法。
因此,有没有一种方法可以告诉这个特性,它将以特定的方式实现?例如
/**
* @used-by AppInterfacesAuthenticatable
*/
这将使IDE知道它可以访问Authenticatable
所拥有的一切?
感谢
您可以通过在特性中声明该方法为抽象方法来强制该方法的存在。不需要文档块注释,IDE将识别该方法,并在某个地方丢失时警告您:
trait HasAvatar {
public function getAvatarUrl() {
return AvatarService::getAvatarUrlForId(
$this->getId()
);
}
public abstract function getId();
}