情境
我正在使用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; }
来解决此问题。它可能看起来有点肿,将在运行时很安全。
我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数
php ziparchive类源代码 - phpImprove 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+…