json_decode-d 对象的 PHP 文档块
Posted
技术标签:
【中文标题】json_decode-d 对象的 PHP 文档块【英文标题】:PHP docblock for json_decode-d objects 【发布时间】:2021-05-02 20:59:36 【问题描述】:我在我的 php 代码中从 JSON 字符串获取对象。我希望我的 IDE (NetBeans) 知道对象的参数而不为它们创建特殊的类。
我可以吗?
它看起来像:
$obj = json_decode($string);
/**
* @var $obj
* @property int $id
* @property string $label
*
*/
【问题讨论】:
这能回答你的问题吗? phpdoc - defining return object variables for a method 您引用的问题的名称和要求都非常糟糕,并且没有公认的答案。答案看起来有些相关,但在我的问题中我指定“不创建特殊类”。 嗯,最受好评的答案基本上是说你不能(尽管它已经有几年了,当然)。 @ArSeN 我刚刚回答了我的问题和你引用的问题。底线是 - “是的,你实际上可以”。 只要你不把创建一个匿名类算作“为他们创建一个特殊的类”。 【参考方案1】:当我使用 PHP 7 时,我可以定义匿名类。
所以,我的解决方案是:
$obj = (new class
/**
* @property int $id
*/
public /** @var string */ $label;
public function load(string $string): self
$data = json_decode($string, true);
foreach ($data as $key => $value)
$this->$key = $value;
return $this;
)->load($string);
echo $obj->id;
echo $obj->label;
我认为这是一道很棒的意大利面。
【讨论】:
【参考方案2】:这是它的结构化版本
首先,你在 helpers
文件夹的某个地方创建一个类
<?php
namespace App\Helpers;
use function json_decode;
class JsonDecoder
public function loadString(string $string): self
$array = json_decode($string, true);
return $this->loadArray($array);
public function loadArray(array $array): self
foreach ($array as $key => $value)
$this->$key = $value;
return $this;
那么,你要小心使用它
$obj= (new class() extends JsonDecoder
public /** @var int */ $id;
public /** @var string */ $label;
);
$obj->loadString($string);
echo $obj->id;
echo $obj->label;
【讨论】:
以上是关于json_decode-d 对象的 PHP 文档块的主要内容,如果未能解决你的问题,请参考以下文章