php - 如何在没有保留上下文的功能的情况下在 PHP 中重复代码块?
问题描述
假设我有表格,在某些情况下我必须设置相同的变量:
(编辑:这不是一个真正的代码,这是一个例子来说明我的观点)
if($_GET['a']==1){
$case="A";
$con->query("UPDATE table SET done=1;");
$refresh_page=1;
$_GET['b']=0;
$a=$_GET['a'];
$b=morph_a2b($_GET['a'],$case);
echo "Process is done with result: $b";
}
if($_GET['b']==2){
$action="A";
$con->query("INSERT INTO table (done) VALUES (0);");
$refresh_page=1;
$_GET['b']=0;
$a=$_GET['a'];
$b=morph_a2b($_GET['a'],$case);
echo "Process has been added";
$proc+=$b;
}
if($_GET['a']==$_GET['b']){
$action="D";
$con->query("DELETE FROM table WHERE id=$_GET[id];");
$refresh_page=1;
$_GET['b']=0;
$a=$_GET['a'];
$b=morph_a2b($_GET['a'],$case);
echo "Process $_GET[id] has been deleted";
$proc-=$b;
}
if(!isset($_GET['b'])){
$case="D";
$con->query("UPDATE table SET done=0;");
$refresh_page=1;
$_GET['b']=0;
$a=$_GET['a'];
$b=morph_a2b($_GET['a'],$case);
echo "Process is undone with result: 0";
}
如您所见,所有这些条件都重复相同的 4 行:
$refresh_page=1;
$_GET['b']=0;
$a=$_GET['a'];
$b=morph_a2b($_GET['a'],$case);
但是我不能用函数替换这 4 行,因为我需要在同一个上下文中设置这 4 个变量,我不能使用大if(condition1 or condition2 or ...)
语句,因为某些行(在开头和结尾)是不同的。
我最好的方法是将这 4 行替换为include('my4lines.php');
,其中 my4lines.php 是包含这 4 行的文件。
重复此代码的最佳方法是什么?
解决方案
创建一个函数并将参数作为参考传递,这将解决您相同的上下文问题。
function aFunction(&$refresh_page, &$a, &$b, &$case){
$refresh_page=1;
$_GET['b']=0;
$a=$_GET['a'];
$b=morph_a2b($_GET['a'],$case);
}
if($_GET['a']==1){
$case="A";
$con->query("UPDATE table SET done=1;");
aFunction($refresh_page,$a,$b,$case);
echo "Process is done with result: $b";
}
if($_GET['b']==2){
$action="A";
$con->query("INSERT INTO table (done) VALUES (0);");
aFunction($refresh_page,$a,$b,$case);
echo "Process has been added";
$proc+=$b;
}
if($_GET['a']==$_GET['b']){
$action="D";
$con->query("DELETE FROM table WHERE id=$_GET[id];");
aFunction($refresh_page,$a,$b,$case);
echo "Process $_GET[id] has been deleted";
$proc-=$b;
}
if(!isset($_GET['b'])){
$case="D";
$con->query("UPDATE table SET done=0;");
aFunction($refresh_page,$a,$b,$case);
echo "Process is undone with result: 0";
}
推荐阅读
- javascript - 如何在 ReactJS 中具有动态 URL 的 Route 中传递变量?
- react-native - navigation.getParam 不是函数
- javascript - Axios 似乎直接绕过了 .then/.catch 和触发了 .finally
- c++ - 如何通过 ROS 将实感数据传输到其他设备
- reactjs - MUI-DataTables 不对我的格式化日期进行排序
- python - 如何有效地从具有多列的 Vaex DataFrame 中删除非有限值?
- c++ - 这个 print_star 函数的运行时复杂度是多少?
- php - 为什么我的项目在抛出 UnsupportedUserException 时仍然运行?
- google-cloud-functions - Apigee 中的自定义域 URL,导致我进入空白的“域”页面
- mysql - 保留相关子查询的结果