PHP 5可以做一些(有限的)type hinting,但是,在我看来,在实际项目中,类型通常在doc注释中描述。例如,而不是:
/**
* Test method
*/
function test(SomeType $param1) {
...
}
通常会有
/**
* Test method
*
* @param SomeType param1
*/
function test($param1) {
...
}
这两种方法有哪些优点和缺点?如果我认为PhpDoc方法更常见,那么为什么呢?为什么人们不再使用内置语言功能?
编辑:第三个选项是使用两种方法合并:
/**
* Test method
*
* @param SomeType param1
*/
function test(SomeType $param1) {
...
}
然而,我个人并没有经常看到这种情况(看看像Symfony或PHPUnit这样的库),这也似乎做了一些工作,说实话没有多少额外的好处。也许这就是为什么不经常看到它。
答案 0 :(得分:4)
首先:PHP类型提示具有与PHPDoc不同的提示能力。差异是(至少):
标量类型。在PHP中你不能提示标量类型,而没有什么能阻止你暗示
/**
* @param string $param Param description
*/
一系列提示。在PHPDoc中,您可以提示,该参数(或返回值)是某些内容的数组。它将是:
/**
* @param ClassName[] $param Param description
*/
这意味着 - ClassName
的实例数组。这在返回类型时非常有用(因为IDE可能会对该数组的迭代中的方法进行替换,因此,您将知道您正在做正确的事情)。但是,在PHP中,您只能将其键入为
function functionName(array $param) { /*...*/ }
因此无法实现数组的实际元素。对于您的信息,有一个相应的RFC作为某些元素的数组的类型提示,目前已被拒绝 - 但将来可能会出现这样的可能性。
但是,另一方面,使用PHP类型提示仍然是不同的,通常你应该同时做两件事 - 所以,如果它可以在PHP中以某种方式提示(如上面的数组示例) - 做到这一点,并且添加PHPDoc块也是如此。 PHP typehint允许您在语言级别上强制执行行为,而PHPDoc只是"信息"来源,它只服务于信息目标,不能阻止传递非法参数类型。
答案 1 :(得分:1)
我个人会同时使用它们。
第一个选项适用于控制传递给方法的对象。第二种通常可以由任何现代IDE自动添加,它使您的代码更具可读性。