为什么在注释中声明PHP变量类型?

时间:2011-10-22 17:34:43

标签: php variables netbeans

我是PHP的新手,我刚开始使用NetBeans来开发我的PHP代码。

出乎意料的是,当我在查询中输入变量时,会弹出一个对话框并要求我完成注释以保存变量类型。我做了一些调查,发现这似乎是NetBeans的一个流行功能,但我找不到任何信息向我解释为什么就是这种情况。

为什么有人想在评论中放置PHP变量的类型?它是用于开发用途还是实际上有益于代码本身?它是积分的还是可选的?

5 个答案:

答案 0 :(得分:33)

在方法注释中的@var标记中添加类型将允许NetBeans向您显示代码完成情况。这当然是可选的,但完全记录您的代码总是一个好主意。

编辑:NetBeans为您自动生成评论的提示是使用/**扩展。为此,只需将光标放在要记录的属性或方法上方,然后键入/**,然后按ENTER键。这将扩展phpDoc样式注释并添加适当的标记。

编辑2: 您可以在属性上使用@var标记,并且可以在方法上使用@param标记来实现与传递给方法的参数相同的效果。

在属性上使用@var标记会在使用属性时为您提供代码提示:

/**
 *
 * @var My_Type
 */
private $_myProperty;

使用方法上的@param标记会在使用方法内的参数时为您提供代码提示:

/**
 *
 * @param My_Type $obj 
 */
public function myMethod($obj) {

}

在提供类型安全性的同时实现类似效果的另一种方法是使用PHP的type hinting机制:

public function myMethod(My_Type $obj) {

}

请注意,此方法具有方法签名中指定的类型。 NetBeans现在将在使用@param标记的方法内提供相同的代码完成,如果传入方法的类型与指定的类型不同,PHP将生成E_RECOVERABLE_ERROR。如果您有兴趣了解有关上述错误的更多信息,请参阅PHP's documentation regarding errors以及如何处理它们。

答案 1 :(得分:9)

我猜你在谈论类似的事情:

/**
 * @var SimpleXMLElement $xml
 */
private $xml;

这就是所谓的phpDoc comment。它允许您生成API文档(like this one for instance)。此外,大多数IDE(包括Eclipse和NetBeans)也支持该语法,并提供动态代码完成等。

答案 2 :(得分:8)

如果要在变量不是类属性但只是包含某些返回值的变量的情况下声明变量的类型,请使用单星注释,然后使用@var,后跟变量名称最后是该变量的类型。例如:

/* @var $errorMessage NotificationMessage */
$errorMessage= $allMessages->rewind()->current();

将告诉NetBeans或PhpStorm $ errorMessage是NotificationMessage的一个实例,您应该获得该变量的代码完成。

答案 3 :(得分:3)

尽管netbeans使用它进行自动完成,但它通常对记录代码很有用:

在这种情况下,你知道这个方法得到什么以及它返回什么但是在代码中你不知道发生了什么

/**
 * Returns some stuff
 * @param string $someObj
 * @return array
 */
public function someMethod($someObj) {
    $factoredObj = getObject($someObj); //you are not sure what type it returns
    $resultArray = $factoredObj->toArray();
    return $resultArray;
}

您可以在代码

中使用/* @var $variable type */对其进行评论
/**
 * Returns some stuff
 * @param string $someObj
 * @return array
 */
public function someMethod($someObj) {
    /* @var $factoredObj someType */
    $factoredObj = getObject($someObj);
    $resultArray = $factoredObj->toArray();
    return $resultArray;
}

$factoredObj = getObject($someObj); /* @var $factoredObj someType */

答案 4 :(得分:1)

因为PHP是一种松散/鸭子类型的语言,所以当您创建一个大型程序时,这些类型提示可以帮助您或其他人了解如果出现问题会发生什么。例如,期望混合类型并发送整数。