33

我使用 Zend Studio 用 CakePHP 在 PHP 中进行开发,而 CakePHP 的问题之一是视图都引用了未声明的局部变量。

因此,例如,在控制器中,您将

$this->set('job',new MyJobObject());

然后在视图中你可以

echo $job->getName();

我的问题是 Zend Studio 无法在 上执行自动完成$job,因为它的类型未知。现在有 PHPDoc 标记允许您声明类型,以便 IDE 可以执行自动完成。例如,@var标签可以在类中用于定义属性的类型。

class MyJobObject
{
    /**
     * @var MyStatusObject
     */
    public $status;
}

有没有办法为局部变量做这样的事情?

4

3 回答 3

42

您必须使用单行表格:/** @var $job MyJobObject */

请注意,一些编辑器更喜欢相反的语法:/** @var MyJobObject $job */

于 2013-01-22T15:49:55.063 回答
24

两个答案都是错误的*,严格来说:

/** @var MyJobObject $job */

是正确的 - 类型始终是第一个参数,然后您输入描述或指定变量本身。

资源:

https://scrutinizer-ci.com/docs/tools/php/php-analyzer/guides/annotating_code https://docs.phpdoc.org/latest/references/phpdoc/types.html

否则,每个现代 PHP IDE 都能够识别几乎任何类型的注释语法:

// @var
/* @var */
/** @var */
/* @var
*/
# @var

最常见、最易读和最广泛接受的形式是

/** @var <type> [variable [comment]] */


/** 
 * @var <type> [variable [comment]] 
 */

PSR-5(建议)https://github.com/php-fig/fig-standards/blob/master/proposed/phpdoc.md

PSR-19(草案)https://github.com/php-fig/fig-standards/blob/master/proposed/phpdoc-tags.md

*) 在 2013 年,语法可能有所不同。

于 2020-01-22T16:31:51.773 回答
1

你应该在你的视图/模板文件之上做。

<?PHP
/* @var $job MyJobObject */
?>
于 2013-01-22T15:50:16.090 回答