簡體   English   中英

PHP:在函數內部調用函數后的if語句

[英]PHP: If statement after calling a function inside a function

我有以下代碼:

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

此處設置的全局變量稍后將在函數外部的代碼中使用。

我知道您不是在問這個問題...但是我將這段代碼簡化為:

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非常簡單。 使用實時調試器使您的生活變得如此簡單。 而且,語法高亮會經常提前向您顯示錯誤。

無論如何,我知道您沒有要求提供幫助編碼,但是我認為您可能會從中受益(教一個人釣魚而不是給他一條魚)。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM