簡體   English   中英

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

[英]PhpStorm Trait method autocompletion does not work

我在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);  

一切正常但是$this->container->attach(new stdClass()); 投擲方法attach沒有找到...任何人都可以幫忙嗎? 我認為正確配置的PHPDoc應該有所幫助。

Trait無法知道其$container類型。 在你的例子中它是SplObjectStorage ,但是如果它不是呢?

您還需要在Trait放置$container並將其聲明為SplObjectStorage 然后它應該工作。 通過這種方式,您還可以確定無論是誰宣布Trait實際上都有一個$container來讓它工作。

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

    ...

我想你可以強迫這個問題:

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

還有其他幾種方法可以完成這項工作。

  1. 在特征中定義$container (如@Iserni建議的那樣),但是定義變量本身。 這實際上更有意義,無論如何在特征中定義它,因為特征方法實際上依賴於它。

     trait Something { /** @var \\SplObjectStorage */ protected $container; public function add() { $this->container->attach(new stdClass()); } } 
  2. 將其作為函數中的參數傳遞

     public function add(\\SplObjectStorage $container) { $container->attach(new stdClass()); } 

PHPStorm必須有一種方法可以參考類來執行自動完成等操作。 您的特征無法從調用類繼承其文檔。 但是,您的類可以從包含的特征繼承文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM