在PHPDoc中声明局部变量的属性

在PHPDoc中声明局部变量的属性,php,variables,properties,phpdoc,Php,Variables,Properties,Phpdoc,我有一个具有一些属性的stdClass实例。在PHPDoc中声明这些属性的正确方法是什么? 我试过了,但似乎不行: /** * @var $requestParams stdClass * @property string cancelUrl */ $requestParams = $someObj->getSomething(); new stdClass()的问题在于,您可以动态声明属性,因此任何文档编制人员都很难解析您的所有代码,找

我有一个具有一些属性的stdClass实例。在PHPDoc中声明这些属性的正确方法是什么? 我试过了,但似乎不行:

    /** 
     * @var $requestParams stdClass
     * @property string cancelUrl 
     */
    $requestParams = $someObj->getSomething();

new stdClass()
的问题在于,您可以动态声明属性,因此任何文档编制人员都很难解析您的所有代码,找到您添加新属性的所有位置,因此您需要为其创建一个类并记录该类:

因此,与其这样做,不如:

/**
 * ... doc block here
 */
class SomeObj {
    /**
     * ... doc block here
     * @return stdClass
     */
    function getSomething() {
        return new stdClass();
    }
}
您可以这样做:

/**
 * ... doc block here
 */
class SomeObj {
    /**
     * ... doc block here
     * @return Something
     */
    function getSomething() {
        return new Something();
    }
}

/**
 * ... doc block here
 */
class Something {
    /**
     * @var string
     */
    public $cancelUrl;
}

给出您的代码示例,您最好通过
@var
指示
$requestParams
类型为
stdClass
。您对
@property
的使用对您没有任何帮助,因为该标记仅为类上存在的魔法属性专门定义。。。因此,
@property
只有在类docblock中时才会被读取和解释

如果您只需要显示$requestParams是stdClass的一个实例,那么@var就是您所需要的全部。但是,如果您还想表示$requestParams->cancelUrl是一个已知的字符串属性,而不更改为实际定义的类,则必须以与$requestParams是局部变量相同的方式使用另一个局部变量:

/** @var stdClass $requestParams */
$requestParams = $someObj->getSomething();

/** @var string $cancelUrl */
$cancelUrl = $requestParams->cancelUrl;

除了回答您的直接问题之外——如果向读者展示这个$requestParams元素具有某些已定义的属性对您来说真的很重要,那么我会选择为它编写一个正式的类。当然,该类中的实现仍然可以是用于保存值的内部stdClass。

我认为这是不可能的。