首页 > 解决方案 > 如何在没有保留上下文的功能的情况下在 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 行的文件。

重复此代码的最佳方法是什么?

标签: php

解决方案


创建一个函数并将参数作为参考传递,这将解决您相同的上下文问题。

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";
}

推荐阅读