如何使用PHPDoc表示法声明局部变量的类型?

Rea*_*lar 22 php cakephp eclipse-pdt zend-studio cakephp-2.2

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

例如,在控制器中你会

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

然后在视图中你可以

echo $ job-> getName();

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

class MyJobObject
{
    /**
     * @var MyStatusObject
     */
    public $status;
}
Run Code Online (Sandbox Code Playgroud)

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

Lev*_*zél 31

你必须使用单行形式: /** @var $job MyJobObject */

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

  • NetBeans似乎认识到`/*@var $ varName varType*/`语法(**注意**在评论开头只有一个`*`) (5认同)

Dan*_* W. 17

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

/** @var MyJobObject $job */
Run Code Online (Sandbox Code Playgroud)

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

资源:

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
Run Code Online (Sandbox Code Playgroud)

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

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


/** 
 * @var <type> [variable [comment]] 
 */
Run Code Online (Sandbox Code Playgroud)

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 年,语法可能有所不同。

  • 这应该是公认的答案,也是 PHP CS 修复程序支持的唯一答案。 (3认同)
  • 同意,在 PHPStorm 中的变量上方输入 `/**` 后,它也会自动转到此语法 (2认同)

Gre*_*ver 6

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

<?PHP
/* @var $job MyJobObject */
?>
Run Code Online (Sandbox Code Playgroud)