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