Return 基于条件的函数结果 - PHP

Return function results based on condition - PHP

我有以下代码

public function create(){
  return self::checkQuantity();
  return self::checkSameLocation();
  return self::someAnotherFunction();
  return self::someMoreFunction();
  ..
  ..
  ..

}

public function checkQuantity(){
  if(someCondition){
     return [foo,bar];
  }
}


public function checkSameLocation(){
  if(someCondition){
     return [foo,bar];
  }
}

我想 return 函数在 create() 中运行,只有当它在其中运行时 returns 其他东西继续执行 create() 函数。

基于示例:

注意:有时在 create() 中可能有多个函数调用,我想避免使用 if statement 检查。

您需要一个 if 和一个临时变量。

public function create(){
  $a = self::checkQuantity();
  if(empty($a)) { 
    return self::checkSameLocation();
  } else {
    return $a;
  }
}

public function checkQuantity(){
  if(someCondition){
     return [foo,bar];
  }
}


public function checkSameLocation(){
  if(someCondition){
     return [foo,bar];
  }
}
public function create(){
    return self::checkQuantity()
           ?? self::checkSameLocation()
           ?? self::someAnotherFunction(); //and so on
}

Null coalescing operator

public function create(){
  $data = function1();
  if ($data) { 
    return $data;
  }

  $data = function2();
  if ($data) { 
    return $data;
  }

  $data = function3();
  if ($data) { 
    return $data;
  }

  // ...

  return function42();
}

这可能导致另一种解决方案,例如:

public function create(){
  $functions = ['func1', 'func2', 'func3',]; // etc
  foreach ($functions as $func) {
    $data = $func();
    if ($data) { 
      return $data;
    }
  }
}

像这样:

(在这种情况下,我已将您所有的检查代码移动到多态 classes 中;根据您的问题,当前 class 中的方法也可以实现同样的效果,但我认为这是这样更整洁)

$checks = [new checkClass1, new checkClass2, new checkClass3, ...];

foreach ($checks as $check) {
    $result = $check->runCheck();
    if ($result) {
        return $result;
    }
}

这看起来是 null coalescing operator

的完美用例
public function create(){
  return self::checkQuantity() ?? self::checkSameLocation() ?? self::someAnotherFunction() ?? return self::someMoreFunction()...
}

您可以链接任意数量的函数调用。该行将 return 第一个不为空的值。由于 return 从函数中获取任何内容实际上等同于 return 获取空值,因此它会如您所愿地工作。