使用PHPDoc @property和@method解析PhpStorm魔术方法和属性警告for $ this-> stdout-> styles

时间:2016-07-19 14:39:27

标签: php cakephp-2.0 phpstorm phpdoc

我试图解决

  

" Field' stdout'没有找到..."

  

"方法...在数组"

中找不到
在PhpStorm上使用PHPDocumentor符号@property@method进行

警告

enter image description here

我能够使用以下方法解决stdout警告:

* @property array stdout

enter image description here

但是现在你如何解决Method 'styles' not found in array警告? (见上面的截图)

我编写了这段代码来演示我想要实现的目标:

* @method array $stdout->styles(array $name, array $items)

这是一个使用CakePhp命令外壳的CakePhp 2项目。

stdout->styles在框架中声明。

有关更多上下文,这就是我的代码:

<?
class InvoiceShell extends AppShell {
    public $uses = array('Invoice', 'Request');

    public function main() {

        $this->stdout->styles('success', ['text' => 'green']);
        $this->stdout->styles('danger', ['text' => 'red']);
        $this->stdout->styles('bold', ['bold' => true]);

        .
        .
        .
    }
}

2 个答案:

答案 0 :(得分:1)

您需要在stdout声明中将array替换为ConsoleOutput,告诉PHPDoc / PhpStorm @property的正确类型。

/**
 * My cool class is cool.
 *
 * @property ConsoleOutput $stdout
 */

如果对象是具有自己魔术访问器的通用容器,则可以通过PhpStorm声明一个仅用于代码完成的接口。只需在位于项目的Sources文件夹中的文件中声明它。

/**
 * @method mixed styles(string, mixed)
 * @method ...
 */
interface FakeForCodeCompletion { }

然后使用FakeForCodeCompletion在您的班级中引用@property(最好是描述性名称),就像它是真正的类/接口一样。

答案 1 :(得分:0)

有类似问题的人可以使用这个。

/** @var $items \Data\Items | mixed */

$items = new \Data\Items;

$items->method('data');
$items->item->method('data');