我试图弄清楚为什么我的代码中出现此错误。
这里是代码:
<?php
namespace Db;
use \PDO\PDOStatement;
function getStmt(string $sql, $pdo): PDOStatement
{
$stmt = $pdo->prepare($sql);
return $stmt;
}
这里是错误:
TypeError:Db \ getStmt()的返回值必须是PDO \ PDOStatement的实例,返回的PDOStatement的实例
use语句似乎弄乱了返回类型的检查。如果我放弃了use语句,该错误看起来像这样,因为现在它假定PDOStatment是当前名称空间的一部分:
TypeError:Db \ getStmt()的返回值必须是Db \ PDOStatement的实例,返回的PDOStatement的实例
如果我摆脱了命名空间和use语句,它不会抱怨,但是我想要这两个语句,并且真的不明白原始代码有什么问题。
您的返回类型正确,但是$pdo->prepare
返回的是\PDOStatement
,而不是\PDOStatement
。给\PDO\PDOStatement
一个类型会有所帮助。