【发布时间】:2016-07-19 14:39:26
【问题描述】:
我正在尝试解决
“在...中找不到字段'stdout'”
和
“方法...未在数组中找到”
在 PhpStorm 上使用 PHPDocumentor 符号 @property 和 @method 发出警告
我能够使用以下方法解决标准输出警告:
* @property array stdout
但是现在您如何解决Method 'styles' not found in array 警告? (见上图)
我编写了这段代码来展示我想要实现的目标:
* @method array $stdout->styles(array $name, array $items)
这是一个使用 CakePhp 的 Command Shell 的 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]);
.
.
.
}
}
【问题讨论】:
-
1) 什么是
stdout? 2)它是如何声明的? 3) 如果它像stdout->styles一样使用.. 那么你为什么要尝试将stdout声明为数组(当它在这里显然是一个对象时)? 3)* @method array $stdout->styles(array $name, array $items)-- 完全错误 -- 你不能这样声明子属性/子方法 -- 只有直接元素。这意味着(使用您的示例)充其量是* @method array styles(array $name, array $items)(这对于您的情况仍然是错误的——但这只是为了说明正确的语法)。 -
@lazyone 感谢您的回复,我已在问题中添加了更多信息。
stdout和styles在 CakePHP 框架中定义。它不在我的控制范围内。 -
那么 ..
stdout是什么?它是什么类型的?因为您可以轻松使用* @property MyStdoutClass $stdout,仅此而已(只需使用正确的类名而不是 MyStdoutClass)。不幸的是,我不是 CakePHP 用户,所以不能在不知道细节的情况下立即为您提供 100% 正确的解决方案。附:如果你不知道stdout是什么类型——你可以尝试调试这样的脚本——xdebug 会告诉它是什么类型/类。 -
感谢@LazyOne!我找到了类型,它是
ConsoleOutput。@property ConsoleOutput stdout工作。如果您愿意,您可以从中创建一个答案,我很乐意接受作为答案。
标签: php cakephp-2.0 phpstorm phpdoc