当一个函数在PHP三元操作中似乎被使用了两次时,调用该函数的频率是多少?
当我在PHP中使用三元操作时,如下所示:当一个函数在PHP三元操作中似乎被使用了两次时,调用该函数的频率是多少?,php,performance,conditional-operator,Php,Performance,Conditional Operator,当我在PHP中使用三元操作时,如下所示: $dataObject = $this->someInstance->getDataFromDB(); //getDataFromDB() for example returns an object or false. It gets data from a database ;-) $variable = !$dataObject ? false : $dataVariable; $variable = !$this->someIn
$dataObject = $this->someInstance->getDataFromDB(); //getDataFromDB() for example returns an object or false. It gets data from a database ;-)
$variable = !$dataObject ? false : $dataVariable;
$variable = !$this->someInstance->getDataFromDB() ? false : $this->someInstance->getDataFromDB();
$variable = !($d = $this->someInstance->getDataFromDB()) ? false : $d;
然后调用一次getDataFromDB()
但是,当我使用如下三元操作时,它的调用频率以及从数据库中提取数据的频率是多少:
$dataObject = $this->someInstance->getDataFromDB(); //getDataFromDB() for example returns an object or false. It gets data from a database ;-)
$variable = !$dataObject ? false : $dataVariable;
$variable = !$this->someInstance->getDataFromDB() ? false : $this->someInstance->getDataFromDB();
$variable = !($d = $this->someInstance->getDataFromDB()) ? false : $d;
我更喜欢性能更好的第一个版本
谢谢您的回答。在第二个示例中,如果第一个表达式的计算结果为
false
,则可能会调用两次getDataFromDB()
,或者您可以这样做:
$dataObject = $this->someInstance->getDataFromDB(); //getDataFromDB() for example returns an object or false. It gets data from a database ;-)
$variable = !$dataObject ? false : $dataVariable;
$variable = !$this->someInstance->getDataFromDB() ? false : $this->someInstance->getDataFromDB();
$variable = !($d = $this->someInstance->getDataFromDB()) ? false : $d;
或者可能:
$variable = $this->someInstance->getDataFromDB() ?: false;
我假设这两个
:
是一个输入错误。如果按第二种方式执行,它会被调用两次,因为您没有存储结果,在某些情况下,根据从getDataFromDB()返回的内容,可能会得到两组不同的结果
您只是在测试真实性。您可能会感兴趣的是,如果该方法已返回一个对象或false,则使用三元值将某个值设置为其结果或false似乎是多余的。我一定是遗漏了什么。@Don't是的,我也在想同样的事情,希望这只是一个例子,我不想就此写论文:)你放弃了吗???