我目前在Aptana Studio 3(目前版本为3.0.7)中使用PHP。我有一个函数,它将返回另一个对象的实例,但该对象是在运行时确定的。因此,不可能用相关评论来装饰功能。相反,我正在寻找一个干净的解决方案,用代码完整的标签对调用者进行去编码。我该怎么做?
/**
* Represents a person.
*/
class Person
{
/**
* Contains the identifier.
*
* @var int
*/
public $PersonId;
/**
* Contains the string.
*
* @var string
*/
public $Name;
}
/**
* A simple factor example.
*
* @return mixed
*/
function CreateExample( $zClass )
{
return new $zClass();
}
/* @var $x Person */
$x = CreateExample( 'Person' ) instanceof Person;
经过评论和instanceof的装饰,它终于成功了,但这看起来很可怕!没有更好的方法来使用一个解决方案并使其按预期工作吗?
好的。首先,我认为CreateExample( 'Person' ) instanceof Person
只是将一个基元布尔值赋给$x
。这也是您在$x
上不会获得代码帮助的原因,即使您编辑了CreateExample
到@return Person
的返回。
如果CreateExample
文档设置正确,设置$x = CreatePerson( 'Person' );
将获得CA。
现在,由于您有一个混合返回类型,一个解决方案是使用@var
文档,就像您所做的那样。但是,您可以使用另一种解决方案。
我假设你知道所有可能的返回类型,所以在这种情况下,你可以管道CreateExample
@return中的那些类型:
@return Person|OtherClass|ThirdClass
现在,当您编写代码辅助$x
时,您将从中获得所有可用元素的聚合,所有都是您管道化的类。
希望能有所帮助!