PhpStorm Trait方法自动完成不起作用

Mat*_*ati 4 php oop phpstorm

我在PhpStorm中遇到自动完成问题...

class Main
{
    use Something;

    /**
     * @var SplObjectStorage
     */
    private $container;

    public function __construct()
    {
        $this->container = new SplObjectStorage();
    }

    public function addSth()
    {
        $this->add();
    }
}


trait Something
{
    public function add()
    {
        $this->container->attach(new stdClass());
    }
}

$m = new Main();
$m->add();

var_dump($m);  
Run Code Online (Sandbox Code Playgroud)

一切正常,但$this->container->attach(new stdClass());抛出的方法attach没有找到......任何人都可以帮忙吗?我认为正确配置的PHPDoc应该有所帮助.

LSe*_*rni 5

Trait无法知道什么类型的方式$container就是.在你的例子中SplObjectStorage,但是如果不是这样的话呢?

你需要将它放在$container内部Trait并将其声明为SplObjectStorage.然后它应该工作.这样一来,你也一定会认为不管是谁宣称特质确实一个$container有它努力.

trait Something {
    /**
     * @var SplObjectStorage 
     */
    private $container;

    ...
Run Code Online (Sandbox Code Playgroud)

我想你可以强迫这个问题:

public function add()
{
    /**
     * @var $cont SplObjectStorage 
     */
    $cont = $this->container;
    $cont->attach(new stdClass());
}
Run Code Online (Sandbox Code Playgroud)