PhpStorm无法将返回类型识别为另一个的扩展 - php

情境

我正在使用PHP7类型提示说我的函数具有返回类型City

public function getCityById(int $city_id) : City { ... }

在此函数中,我返回运行取景器的结果。

return $this->city_finder->findById($city_id);

但是PhpStorm在这里抱怨,因为findById()函数返回AbstractModel

但是我有class City extends AbstractModel,所以这不是问题。但是,PhpStorm似乎无法识别这一点,并用警告突出显示了return语句。

我不想忽略此类警告(禁用检查),因为它是一个重要的警告。

我可以使PhpStorm识别此return语句满足返回类型吗?

附加信息

一种解决方法是提取变量并对其进行注释,如下所示:

/** @var City $city */
$city = $this->city_finder->findById($city_id);
return $city;

在这一点上,它停止向我发出警告,但似乎应该避免多余的行,因为它仅存在于IDE中以使警告静音。

findById()函数可以防止返回错误的类型,因为Finder类是按模型生成的。

$this->city_finder = $this->orm->getFinder(City::class);
//...
$city = $city_finder->findById(...);

参考方案

PHPStorm是正确的。

您的findById()返回AbstractModel,而您尝试返回的City范围更广。在某种情况下,如果您从findById()接收到一些其他类,该类也从AbstractModel继承,但不是City或其后代-您将收到来自PHP的致命错误,这是PHPStorm警告您的内容。

您可以通过添加注释(如已经这样做)或显式检查if ($city instanceof City) {return $city; }来解决此问题。它可能看起来有点肿,将在运行时很安全。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP mysqli获取查询返回的第一行的值 - php

我正在使用mysqli从数据库中获取某些数据。我正在使用的查询已设置为仅从数据库返回一行。有没有一种方法可以在不使用while循环的情况下获取该行的值?我知道一个while循环对于返回多于一行的行很有用,但是如果不需要while循环,我想避免这种情况,因为不必要的代码是不好的编程。 参考方案 是的-您可以使用:$row = $result->fetch…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…