我试图解决
" Field' stdout'没有找到..."
和
在PhpStorm上使用PHPDocumentor符号"方法...在数组"
中找不到
@property
和@method
进行警告
我能够使用以下方法解决stdout警告:
* @property array stdout
但是现在你如何解决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]);
.
.
.
}
}
答案 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');