注入类中的代码完成

时间:2014-10-24 12:19:17

标签: php phpstorm

这是我想要获得的示例代码,但在用户类中,我在PHPSotrm中没有得到代码完成(对于$ this-> app)。 如何更改该代码以启用代码完成?我想避免global

namespace myApp

class app
{
    public $pdo = "my PDO";

    public function __construct() {
        $this->user=new User($this);
        $this->test=new Test($this);
        echo $this->user->getPDO(); 
        //"my PDO"
        echo $this->test->getUserPDO(); 
        //"my PDO"
    }
}

class User
{
    private $app=null;

    public function __construct($app) {
        $this->app=$app;
    }
    public function getPDO() {
        return $this->app->pdo;
        //no code completion
    }
}

class Test
{
    private $app=null;

    public function __construct($app) {
        $this->app=$app;
    }
    public function getUserPDO() {
        return $this->app->user->getPDO;
        //no code completion
    }
}

1 个答案:

答案 0 :(得分:1)

有很多关于如何实现这一目标的信息。您需要做的就是添加描述属性类型的PHPDoc。

class User
{
    /**
     * @var App
     */   
    private $app=null;

    /**
     * @param App $app
     */
    public function __construct($app) {
        $this->app = $app;
    }

    /**
     * @return PDO
     */
    public function getPDO() {
        return $this->app->pdo;
    }
}

如果通过魔法getter / setter实现属性,则可以在类本身上使用相同的原则。

/**
 * @property App $app
 * @method Pdo getPdo()
 */
class User
{
    // …