我有以下代码:
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()函数之外的代码。
此处设置的全局变量稍后将在函数外部的代码中使用。
答案 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非常简单。使用实时调试器使您的生活变得如此简单。而且,语法高亮会经常提前向您显示错误。
无论如何,我知道您没有要求提供帮助编码,但是我认为您可能会从中受益(教男人钓鱼而不是给他钓鱼)。
祝你好运!