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

PHP:If语句在调用函数内部的函数之后,php,Php,我有以下代码: function selectApi() { ... } function runApis( $a1, $a2, $a3, $formVars ) { global $responseUrl; global $responseType; selectApi($a1['provider'], $formVars, $a1['min_price']); if( $responseType !== 'valid') {

我有以下代码:

  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 );
我试图实现的行为是调用runAPI()函数,然后为第一个api运行selectApi()函数。在selectApi()函数的末尾,将设置$responseType变量。然后,如果$responseType无效,我想为第二个api再次运行它

但目前它只运行selectApi()函数,然后继续运行包含runAPI()函数之外的代码


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

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

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原则(这是我所知道的最重要的编码原则之一,而忽略它是导致许多bug的原因)

另外,我知道你不是在问,但一般来说,环球都不好。您可以使用&symbol通过引用传递$responseType,或者只从runapi函数返回它(在大多数语言中,通过引用传递是一种代码味道,因此返回它是更好的选择)

而且。。。您是否使用可以调试代码的IDE?我发现使用phpstorm调试php非常简单。使用实时调试器使您的生活变得简单多了。而且,语法突出显示通常会提前向您显示bug

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


祝你好运

这是错误的,因为它不是有效的PHP语法。“selectApi”需要是它自己的函数,在“RunAPI”之外。它是它自己的函数,在RunAPI之外,我只是没有将它包含在代码段中,因为它是相关的代码。如何设置
$responseType
呢?只是一个猜测,但请尝试
$GLOBALS['responseType']
或让
runapi()
返回它。好的,我将包含其他代码,并附带