带有类型提示返回值和使用声明的问题

问题描述 投票:0回答:1

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

这里是代码:

<?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语句,它不会抱怨,但是我想要这两个语句,并且真的不明白原始代码有什么问题。

php types php-7
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.