类型提示返回值和使用语句的问题

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


这是代码:


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


牛魔王的故事
浏览 78回答 1
1回答

泛舟湖上清波郎朗

您的返回类型是正确的,但$pdo->prepare返回\PDOStatement的是不正确的\PDO\PDOStatement。$pdo给出一个类型会有所帮助。这就是为什么如果将返回类型更改为\PDOStatement.
打开App,查看更多内容
随时随地看视频慕课网APP