php - 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() 函数之外的代码。
此处设置的全局变量稍后将在函数外部的代码中使用。
解决方案
我知道你不是在问这个......但我会将这段代码简化为:
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 非常简单。使用实时调试器让您的生活变得如此简单。而且,语法突出显示会经常提前向您显示错误。
无论如何,我知道您没有寻求编码方面的帮助,但我认为您可能会从中受益(教一个人钓鱼与给他一条鱼)。
祝你好运!
推荐阅读
- php - SQL Server query only works if no variables are empty
- python - 使用 python 和 selenium 从网页的一部分截取屏幕截图
- kubernetes - Prometheus Metrics - 用于自动缩放
- python - 如何创建以列为数组的熊猫数据框
- ruby-on-rails - 在 activeadmin 表单中的复选框标签旁边添加图像
- typescript - Typescript 获取“import * as whatIsMyType from './foo';”的类型
- azure - GET 请求有效,POST 请求无效(Microsoft Azure South Central US)
- java - 如何在 Lucene 7.4 中索引短字段
- selenium-webdriver - 在自动化测试中打开浏览器的页面对象模型中的标准做法是什么?
- javascript - 带有异步调用的 ES6 循环