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()
返回它。好的,我将包含其他代码,并附带