类型提示问题 Return 值和使用语句

Issue with Type Hinting Return Values and Use Statments

我想弄清楚为什么我的代码中会出现此错误。

代码如下:

<?php

namespace Db;

use \PDO\PDOStatement;

function getStmt(string $sql, $pdo): PDOStatement
{
    $stmt = $pdo->prepare($sql);
    return $stmt;
}

这是错误:

TypeError: Return value of Db\getStmt() must be an instance of PDO\PDOStatement, instance of PDOStatement returned

use 语句似乎搞乱了 return 类型的检查。如果我去掉 use 语句,错误看起来像这样,因为现在它假定 PDOStatment 是当前命名空间的一部分:

TypeError: Return value of Db\getStmt() must be an instance of Db\PDOStatement, instance of PDOStatement returned

如果我去掉命名空间和 use 语句,它不会报错,但我想要这两个语句,而且真的不明白原始代码有什么问题。

您的 return 类型是正确的,但是 $pdo->prepare 是 returning \PDOStatement 而不是 \PDO\PDOStatement。给 $pdo 一个类型会有帮助。

这就是为什么将 return 类型更改为 \PDOStatement 时不会出现错误的原因。