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 文档块的主要内容,如果未能解决你的问题,请参考以下文章

PHP面向对象编程题(方法的实践)

Sublime Text 2 评论/文档块

有没有好的php库可以将html/php文档转换成对象

定位与锚点

PHP学习笔记——入门篇——语法&变量

对象存储与块存储文件存储等对比