首页 > 解决方案 > PHP:在函数内部调用函数后的If语句

问题描述

我有以下代码:

  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() 函数之外的代码。

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

标签: php

解决方案


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

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 非常简单。使用实时调试器让您的生活变得如此简单。而且,语法突出显示会经常提前向您显示错误。

无论如何,我知道您没有寻求编码方面的帮助,但我认为您可能会从中受益(教一个人钓鱼与给他一条鱼)。

祝你好运!


推荐阅读