我在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应该有所帮助.
在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)