类型提示问题 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
时不会出现错误的原因。
我想弄清楚为什么我的代码中会出现此错误。
代码如下:
<?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
时不会出现错误的原因。