【问题标题】:How often will a function be called when it seems te be used twice in a PHP ternary operation?当一个函数在 PHP 三元运算符中似乎被使用了两次时,它多久会被调用一次?
【发布时间】:2020-06-18 13:06:00
【问题描述】:

当我像这样在 PHP 中使用三元运算时:

$dataObject = $this->someInstance->getDataFromDB(); //getDataFromDB() for example returns an object or false. It gets data from a database ;-)
$variable = !$dataObject ? false : $dataVariable;

然后getDataFromDB() 被调用一次。

但是当我使用这样的三元运算时,它被调用的频率以及从数据库中获取数据的频率:

$variable = !$this->someInstance->getDataFromDB() ? false : $this->someInstance->getDataFromDB();

我更喜欢性能更好的第一个版本。

感谢您的回答。

【问题讨论】:

  • 如果您按照第二种方式进行操作,则会调用两次,因为您没有存储结果,并且在某些情况下,根据getDataFromDB() 返回的内容,可能会获得两组不同的结果你只是在测试真实性。
  • 您可能对Elvis operator感兴趣
  • 如果该方法已经返回一个对象或 false,则使用三元组为其结果或 false 设置某些内容似乎是多余的。我一定是错过了什么。
  • @Don'tPanic 是的,我也在想同样的事情,希望这只是一个例子,不想写论文:)
  • OP 你放弃了吗?

标签: php performance conditional-operator


【解决方案1】:

在第二个示例中,如果第一个表达式的计算结果为 false,则可能会调用两次 getDataFromDB(),或者您可以这样做:

$variable = !($d = $this->someInstance->getDataFromDB()) ? false : $d;

或者可能:

$variable = $this->someInstance->getDataFromDB() ?: false;

我假设这两个 : 是一个错字。

【讨论】:

    猜你喜欢
    • 2023-01-20
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多