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()
被调用
- 如果
checkQuantity
return 什么都没有然后继续 checkSameLocation()
而不 returning checkQuantity()
函数
注意:有时在 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
}
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 获取空值,因此它会如您所愿地工作。
我有以下代码
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()
被调用- 如果
checkQuantity
return 什么都没有然后继续checkSameLocation()
而不 returningcheckQuantity()
函数
注意:有时在 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
}
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 获取空值,因此它会如您所愿地工作。