0

使用されるクラス/インターフェースを特性に知らせる有効な 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()

getId()ただし、IDE にいる場合は、特性に属していないため見つけることができません。また、このメソッドの場所を示すコメント ヒントもありません。

したがって、この特性が特定の方法で実装されることを伝える方法はありますか? 例えば

/**
 * @used-by \App\Interfaces\Authenticatable
 */

これにより、IDE は、持っているすべてのものにアクセスできることを知ることができますAuthenticatableか?

ありがとう

4

1 に答える 1

1

トレイト内でメソッドを抽象として宣言することで、そのメソッドの存在を強制できます。その場合、docblock 注釈は必要ありません。IDE はメソッドを認識し、どこかに欠落している場合は警告します。

trait HasAvatar {
    public function getAvatarUrl() {
        return AvatarService::getAvatarUrlForId(
            $this->getId()
        );
    }
    
    public abstract function getId();
}
于 2021-07-02T09:41:31.347 に答える