Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个函数在PHP三元操作中似乎被使用了两次时,调用该函数的频率是多少?_Php_Performance_Conditional Operator - Fatal编程技术网

当一个函数在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

当我在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->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是的,我也在想同样的事情,希望这只是一个例子,我不想就此写论文:)你放弃了吗???