如何记录来自另一种方法的 return 类型?
How do I document the return type which comes from another method?
当一个方法 return 调用另一个方法的结果时,记录 return 类型的明智方法是什么?
class A
{
/**
* @return [How do I know here what bar will return?]
*/
public function foo()
{
$b = new B();
return $b->bar();
}
}
class B
{
/**
* @return string
*/
public function bar()
{
return 'baz';
}
}
如果不确定 B::baz()
将 return 是什么类型,我如何记录 A::foo()
return 类型?将来,B::baz()
可能会发生变化,在这种情况下,A::foo()
的 return 类型会在不知不觉中发生变化。
这是代码味道吗?是否可以设计更宽的代码,以便即使 B::baz()
发生变化,A::foo()
的 return 类型也是可预测的?
如果我们谈论的是更高的类型严格,你应该重构你的代码并告诉 bar() 哪种类型将被 returned : (PHP >7.0)
class A
{
/**
* @return string
*/
public function foo()
{
$b = new B();
return $b->bar();
}
}
class B
{
/**
* @return string
*/
public function bar() : string
{
return 'baz';
}
}
参考:http://php.net/manual/en/migration70.new-features.php
但在你的情况下,我会把 B\bar
作为 return 类型,因为你 returning class B
和方法的实例bar
.
* @return B\bar
*/
public function foo()
{
如果您担心 bar()
return 类型会发生变化而不考虑您的 foo()
期望的内容,那么我会说这确实是一种代码味道。两者之间显然没有合同,因此 A
和 B
之间没有信任。
更实际地说,bar()
被 记录为 到 return string
,所以通过将 foo()
编码为 return bar()
的实际 return,那么 foo()
也应该记录为 return string
。文档生成器/IDE不会有自动方式跟上这个为你,如果那是你之后。
另一个仅限文档的选项是将 foo()
的 return 标记为 mixed
,从而告诉 reader "I make no guarantees on what I return, because I'm only giving you what bar()
gave me, and I don't know ahead of time what that will be".
当一个方法 return 调用另一个方法的结果时,记录 return 类型的明智方法是什么?
class A
{
/**
* @return [How do I know here what bar will return?]
*/
public function foo()
{
$b = new B();
return $b->bar();
}
}
class B
{
/**
* @return string
*/
public function bar()
{
return 'baz';
}
}
如果不确定 B::baz()
将 return 是什么类型,我如何记录 A::foo()
return 类型?将来,B::baz()
可能会发生变化,在这种情况下,A::foo()
的 return 类型会在不知不觉中发生变化。
这是代码味道吗?是否可以设计更宽的代码,以便即使 B::baz()
发生变化,A::foo()
的 return 类型也是可预测的?
如果我们谈论的是更高的类型严格,你应该重构你的代码并告诉 bar() 哪种类型将被 returned : (PHP >7.0)
class A
{
/**
* @return string
*/
public function foo()
{
$b = new B();
return $b->bar();
}
}
class B
{
/**
* @return string
*/
public function bar() : string
{
return 'baz';
}
}
参考:http://php.net/manual/en/migration70.new-features.php
但在你的情况下,我会把 B\bar
作为 return 类型,因为你 returning class B
和方法的实例bar
.
* @return B\bar
*/
public function foo()
{
如果您担心 bar()
return 类型会发生变化而不考虑您的 foo()
期望的内容,那么我会说这确实是一种代码味道。两者之间显然没有合同,因此 A
和 B
之间没有信任。
更实际地说,bar()
被 记录为 到 return string
,所以通过将 foo()
编码为 return bar()
的实际 return,那么 foo()
也应该记录为 return string
。文档生成器/IDE不会有自动方式跟上这个为你,如果那是你之后。
另一个仅限文档的选项是将 foo()
的 return 标记为 mixed
,从而告诉 reader "I make no guarantees on what I return, because I'm only giving you what bar()
gave me, and I don't know ahead of time what that will be".