【问题标题】:Is it bad practice to type hint returned value on a function that must return true or false在必须返回 true 或 false 的函数上键入提示返回值是不好的做法
【发布时间】:2011-05-23 07:25:08
【问题描述】:

快速提问:对于那些不了解 CakePHP 模型的人->count();总是返回一个整数。

如果我有一个函数来验证一个表是否为空(返回真或假),这样做是不是一个坏主意:

public function isEmpty() {
    return (boolean) $this->find('count');
}

相对于更冗长的:

public function isEmpty() {
    if (empty($this->find('count'))) {
        return true;
    }
    return false;
}

基本上,以这种方式使用类型提示是否合适?

【问题讨论】:

  • 那不是类型提示,那是类型转换。在 PHP 中转换为布尔值是 (bool).
  • 此外,您不能在函数/方法表达式上使用empty()
  • 两者都有效我不想使用速记。
  • 是的,我将它缩短为堆栈溢出但忘记了。

标签: php cakephp type-hinting


【解决方案1】:

正如博尔特所说,这是cast,而不是hint(完全不同)。另外,你倒过来了。

但是:

public function isEmpty() {
    return !$this->find('count');
}

会好的。您不需要演员表,因为 ! 会隐式处理它。

【讨论】:

  • +1 尽可能简单的技巧。使用empty() 会更有意义,但是我必须创建一个局部变量才能使用它,这毫无意义。
  • 我会使用 find('count') == 0 作为表达式,只是因为它对我来说更明确/清晰/有意义。
【解决方案2】:

这不是类型提示 - 它是强制转换。该语法实际上采用右侧表达式的值,并将其转换为您指定的类型(在本例中为boolean)。

像这样使用强制转换没有任何问题,只要您确定它对所有可能的值都会产生您想要的效果

投射根据此处列出的规则进行:type casting。您必须关注您关心的任何类型的链接。 casting to boolean are here的规则。

阅读文档,确保您理解它们——这可能很棘手。但是,如果您理解并正确使用它,它会是一个有用的工具。

【讨论】:

  • 谢谢 我不确定我是否使用了正确的术语,我会查看您指出的文档。
【解决方案3】:

你为什么不检查你想知道的?

public function isEmpty() {
    return (0 == $this->find('count'));
}

但是是的,我认为你的第一个版本在某种意义上是合适的。

【讨论】:

    【解决方案4】:

    为什么不这样做?

    return (empty($this->find('count'))) ? true : false;
    

    【讨论】:

    • 另一个更短更甜,但你可以为它点赞。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2017-09-24
    相关资源
    最近更新 更多