【问题标题】:PHP Docblock for Trait to understand parent classPHP Docblock for Trait 了解父类
【发布时间】:2021-09-14 06:21:19
【问题描述】:

是否有一个有效的 Docblock 标签让 trait 知道它将与哪个类/接口一起使用?例如(以下纯属编造代码)。

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 trait 从父类访问getId()

但是,当您在 IDE 中时,它无法找到 getId(),因为它不属于该特征,并且没有注释提示说明在哪里可以找到此方法。

因此,有没有办法告诉这个 trait 它将以特定的方式实现?例如

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

这会让 IDE 知道它可以访问 Authenticatable 拥有的所有内容?

谢谢

【问题讨论】:

    标签: php traits docblocks


    【解决方案1】:

    您可以通过在 trait 中将方法声明为抽象来强制该方法的存在。然后不需要 docblock 注释,IDE 将识别该方法并在它丢失时警告您:

    trait HasAvatar {
        public function getAvatarUrl() {
            return AvatarService::getAvatarUrlForId(
                $this->getId()
            );
        }
        
        public abstract function getId();
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 2012-04-02
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      相关资源
      最近更新 更多