小编mag*_*ito的帖子

PHP类型提示抽象方法的实现 - 存储库模式

是否可以使用模型/存储库模式在PhpStorm中获得行代码完成?

我的设置

我正在使用Laravel并实现Laracasts视频中描述的存储库模式.

代码

下面是模型在Laravel中如何工作的基本示例,以及如何无法获得模型属性的代码完成.

这段代码可以正常工作并打印出'billy',但属性$ name不是类型提示,也不会在PhpStorm中完成代码.类型提示是优先考虑父属性定义类型而不是子元素,这对我来说似乎很奇怪.

<?php

// Models
abstract class Model {
    public $sqlTableName;

    public function findFromDatabase($id)
    {
        $model = new $this;

        // This would be grabbed using table name and $id
        $fakeDatabaseRow = ['name' => 'billy', 'job' => 'engineer'];

        foreach ($fakeDatabaseRow as $column => $value) {
            $model->$column = $value;
        }

        return $model;
    }
}

class User extends Model {
    public $name;
    public $job;

    public $sqlTableName = 'users';
}

// Repositories
abstract class RepositoryBase {
    /**
     * …
Run Code Online (Sandbox Code Playgroud)

php type-hinting repository-pattern phpstorm laravel

5
推荐指数
1
解决办法
486
查看次数