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

时间:2013-01-22 15:44:03

标签: php cakephp zend-studio eclipse-pdt 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;
}

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

3 个答案:

答案 0 :(得分:29)

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

请注意,有些编辑更喜欢使用语法:/** @var MyJobObject $job */

答案 1 :(得分:6)

您应该在视图/模板文件的顶部进行操作。

<?PHP
/* @var $job MyJobObject */
?>

答案 2 :(得分:4)

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

Tera Term

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

资源:

this code from GeeksForGeeks https://scrutinizer-ci.com/docs/tools/php/php-analyzer/guides/annotating_code

Otherweise,每个现代的PHP IDE都可以识别几乎所有类型的注释语法:

/** @var MyJobObject $job */

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

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

PSR-5(拟议)https://docs.phpdoc.org/latest/references/phpdoc/types.html

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

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