0

PHP trait 不能声明一个常量,但是是否可以使用 DocComment(或其他方式)声明一个常量,如果使用该 trait 的类定义了该 trait 可能“使用”它?

例如,假设一个类Book是绑定到books表的模型。该框架要求将表定义为TABLE常量:

class Books extends Model
{
    const TABLE = 'books';
}

创建模型时,我的 IDE 会自动完成TABLE常量,因为它是在Model. 精彩的。

现在,假设我有一个称为Sluggabletrait 的 trait,它可以帮助开发人员管理书的 URL slug(例如treasure-island),其中一个配置选项是是否自动调整书名。说这是由AUTOMATIC_SLUGS常数控制的。

trait Sluggable {
    public function generateSlug()
    {
        if (defined('static::AUTOMATIC_SLUGS') && static::AUTOMATIC_SLUGS) {
            // do the thing
        }
    }
}

显然,特征不能定义AUTOMATIC_SLUGS常量,因为这是不允许的,但是 IDE 不能建议或以其他方式验证AUTOMATIC_SLUGS常量。所以我的模型Books现在有一个警告(在我的 IDE 中)告诉我AUTOMATIC_SLUGS没有使用:

class Books extends Model
{
    use Sluggable;

    const TABLE = 'books';

    // IDE complains about this constant
    const AUTOMATIC_SLUGS = true;
}

有没有办法让我 - 在特性上,并且不重构以使用静态属性 - 声明Sluggable将检查一个调用的常量AUTOMATIC_SLUGS并让 IDE 建议它/不认为它没用?

4

0 回答 0