PHP:在函数内部调用函数后的if语句

时间:2018-07-26 18:29:26

标签: php

我有以下代码:

  function selectApi() {
    ...
  }

  function runApis( $a1, $a2, $a3, $formVars ) {
    global $responseUrl;
    global $responseType;

    selectApi($a1['provider'], $formVars, $a1['min_price']);
    if( $responseType !== 'valid') {
      selectApi($a2, $formVars, $a2['min_price']);
    }
    if( $responseType !== 'valid' ) {
      selectApi($a3, $formVars, $a3['min_price']);
    }
  }

  runApis( $api1, $api2, $api3, $formVars );

我要实现的行为是调用runApis()函数,该函数然后将为第一个api运行selectApi()函数。在selectApi()函数的末尾,将设置$ responseType变量。然后,如果$ responseType无效,我想再次为第二个api运行它。

但是目前,它只运行selectApi()函数,然后继续运行封闭的runApis()函数之外的代码。

此处设置的全局变量稍后将在函数外部的代码中使用。

1 个答案:

答案 0 :(得分:0)

我知道您不是在问这个问题...但是我会将这段代码简化为:

function runApis( array $apis, array $formVars ) {
    global $responseUrl;
    global $responseType;

    foreach($apis as $api){
        selectApi($api, $formVars, $api['min_price']);
        if($responseType === 'valid'){
            break;
        }
    }
}

runApis( [$api1, $api2, $api3], $formVars );

这样可以使您遵循DRY原则(这是我所知道的最重要的编码原则之一,而忽略其中的原因是许多错误的原因)。

此外,我知道您没有要求,但总体而言,全局变量是不好的。您可以使用&符号通过引用传递$ responseType,也可以从runApis函数返回它(通过引用传递是大多数语言的代码味道,因此返回它是一个更好的选择)。

然后...您是否正在使用可以调试代码的IDE?我发现使用phpstorm调试php非常简单。使用实时调试器使您的生活变得如此简单。而且,语法高亮会经常提前向您显示错误。

无论如何,我知道您没有要求提供帮助编码,但是我认为您可能会从中受益(教男人钓鱼而不是给他钓鱼)。

祝你好运!

相关问题