如何保持if语句的结果


How to keep the result of an if statement

我经常发现自己在做这样的事情:

$search = 'some string';
if(strpos($html, $search)!==false){
  $trimmed = substr($html, strpos($html, $search));
  // whole bunch of other stuff
}

有没有一种方法可以做到这一点,而不需要调用strpos()两次?目前,我首先调用它进行if()检查,然后再次调用它进行执行。这显然是低效的。

即使我尝试使用三元运算符,当我将其指定为真值时,我仍然会调用strpos()两次。

$trimmed = strpos($html, $search)!==false ? substr($html, strpos($html, $search)) : false;
if($trimmed!==false){
  // the other stuff  
}

保持if语句结果的最佳方法是什么,这样就不需要在其内部再次调用它了?

$pos = strpos($html, $search);
if ($pos !== false) {
  $trimmed = substr($html, $pos);
}

if (($pos = strpos($html, $search)) !== false) {
  $trimmed = substr($html, $pos);
}

在三进制中,您正在调用strpos()的值,如果它不是false,则再次调用strpos()并将其存储在trimmed中,否则,如果它是false,则将其设置为false

您关心无缘无故地打两次strpos(),因为:

strpos($html, $search) == (strpos($html, $search)!==false ? substr($html, strpos($html, $search)) : false;)

只需将函数调用的值存储在一个变量中并进行检查:

$trimmed = strpos($html, $search)
if($trimmed!==false){
  // the other stuff  
}