PHP指定一个方法的返回类型提示

17

请问我应该如何正确地为一个方法指定返回类型提示的语法?

比如说,我有以下这样一个方法:

private static function ConstructPDOObject($dbname) 
{
      $hostname =self::HOSTNAME;
        $username = self::USERNAME;
        $password = self::PASSWORD;
        $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
        return $dbh;
}

每当我调用上述方法时,希望IDE能够显示PDO的方法。

如何添加类型提示?

5个回答

24

为了日后参考,这是针对PHP 7实现的,语法如下(引自来源):

function foo(): array {
    return [];
}

现在回答你的问题,从PHP 7开始(大约在2015年底发布),你可以执行以下操作(例如):

<?php

function ConstructPDOObject($hostname, $dbname, $username, $password): PDO 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
    return $dbh;
}

该规范还允许在接口内部和对接口进行类型提示;对于那些有兴趣遵循SOLID原则的人来说,这非常重要。

来源和更多信息:https://wiki.php.net/rfc/return_types


23

AptanaPDTZend Studio 和其他 IDE 中,您可以按照以下方式向 PHP 方法添加类型提示:

/**
 * Constructs a new PDO Object and returns it
 *
 * @param string $dbname name of the database to connect to
 * @return PDO connection to the database
 */
private static function ConstructPDOObject($dbname) 
{
      $hostname =self::HOSTNAME;
      $username = self::USERNAME;
      $password = self::PASSWORD;
      $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
      return $dbh;
}

在文档块的 @return 属性后面放置类名可以表示方法的返回类型。例如,在您的示例方法中,PDO 是返回的类名。附加描述“连接到数据库”用于向其他开发人员提供有意义的返回值说明,这不是必需的,但建议采用。

使用这种方式记录 PHP 方法的好处之一是,您可以使用 phpDocumentordoxygen 生成文档。


1
我有一个与Graviton类似的问题:你的答案是使用IDE代码分析功能的解决方法,而不是PHP规范。无论如何,因为它有效,所以点赞。 - Benj
你可以在返回之前进行预转换来检查返回类型,但它只会检查返回结果是否可以转换为指定的类型。请参见[php.net/manual/en/language.types.type-juggling.php](感谢StackOverflow用户DhruvPathak)。 - Benj

5

PHP不支持返回类型的类型提示。也许您应该添加一个文档块,声明返回类型,也许您的IDE会拾取它(我不知道是否会)。


已确认在NetBeans 8.1中运行!感谢提示。 - C-H-a-P

4

IDE提示通过注释完成。以下是我一个ZEND前置插件的示例:

<?php

/**
 * Initializes Application wide authentication
 *
 * @author Lance Rushing
 * @since  2009-06-01
 * @param  Zend_Session $session
 * @return Zend_Auth  <--- gives IDE Hint
 */
protected function initAuth($session)
{
    $auth = Zend_Auth::getInstance();
    require_once 'AuthStorage.php';
    $auth->setStorage(new My_AuthStorage($session));
    return $auth;
}

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接