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



我对PHP相当陌生,我刚刚开始使用NetBeans开发我的PHP代码。

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

为什么有人想把PHP变量的类型放在注释中?它是用于开发,还是实际上对代码本身有益?它是积分的还是可选的?

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

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

编辑2:你可以在一个属性上使用@var标签,你也可以在一个方法上使用@param标签,通过传递给一个方法的参数来达到同样的效果。

在属性上使用@var标签会给你代码提示,当你在任何可见的地方使用属性时:

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

在方法上使用@param标记将在方法内部使用参数时给您代码提示:

/**
 *
 * @param My_Type $obj 
 */
public function myMethod($obj) {
}
另一种实现类似效果并提供少量类型安全的方法是使用PHP的类型提示机制:
public function myMethod(My_Type $obj) {
}

注意,该方法具有方法签名中指定的类型。NetBeans现在将在方法内部提供与使用@param标记可用的相同的代码完成,如果传递给方法的类型与指定的类型不同,PHP将生成E_RECOVERABLE_ERROR。如果您有兴趣了解更多有关上述错误的信息,请参阅PHP的有关错误和如何处理错误的文档。

我猜你是在说这样的话:

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

这就是所谓的phpDoc注释。它允许您生成API文档(例如这个)。此外,包括Eclipse和NetBeans在内的大多数ide也支持该语法,并提供动态代码完成等。

如果你想声明变量的类型,而变量不是一个类属性,而只是一个保存一些返回值的变量,使用单星注释,然后是@var,然后是变量名,最后是该变量的类型。例如:

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

将告诉NetBeans或PhpStorm $errorMessage是NotificationMessage的一个实例,你应该得到该变量的代码补全。

尽管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 */

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

相关内容

  • 没有找到相关文章

最新更新