【问题标题】:Type-hinting for stdClass properties?stdClass 属性的类型提示?
【发布时间】:2019-03-26 07:56:58
【问题描述】:

是否有一种标准方法来键入提示 stdClass 上存在的属性?

例如,我使用一些 API 并获得 JSON 响应。然后我用json_decode 解析它,但我希望IDE 知道这个stdClass 对象有什么属性。

我试过这样做:

$obj = json_decode($jsonResponse);
/** @var $obj \stdClass */
/** @property String $obj->prop */

但 PhpStorm 仍然无法识别 $obj 具有属性 prop

有没有办法让它工作?

【问题讨论】:

  • /** @property String $obj->prop */ -- 它不能那样工作。您有 2 个选项:1) 只需使用您想要的任何字段,IDE 不应警告您未知字段,因为它是 stdClass 实例。 2) 仅为 IDE 创建一些假类,并在您的类型提示中使用它而不是 \stdClass

标签: php phpstorm type-hinting


【解决方案1】:

您可以创建一个继承 stdClass 并描述属性的类。响应对象可能会转换为它。例如:

/**
 * @property string $prop
 */
class SomeClass extends stdClass
{
}

$obj = json_decode($jsonResponse);
$obj = (SomeClass)$obj;

【讨论】:

  • 这最后一行实际上是一个解析错误,你不能强制转换为非原始类型。只需改用/** @var SomeClass $obj */
猜你喜欢
  • 2016-10-29
  • 2019-02-20
  • 2013-11-22
  • 2021-12-14
  • 2022-12-19
  • 2016-09-12
相关资源
最近更新 更多