【问题标题】:When should we assign a value to a new variable? [closed]我们什么时候应该为新变量赋值? [关闭]
【发布时间】:2024-11-03 13:05:02
【问题描述】:

给定以下代码:

AND (myTable.field_1 IN ('" . implode("','", $myObj->userStatus) . "')
  OR myTable.field_2 IN ('" . implode("','", $myObj->userStatus) . "')
  OR myTable.field_3 IN ('" . implode("','", $myObj->userStatus) . "'))";

最佳做法是什么以及为什么:

1) 按原样使用。 (难看,但不会创建只读的新变量)。
2)使其更好地读取和维护创建一个变量来保存该值并这样做:

$userStatus = $myObj->userStatus;
//Some Code HEre

AND (myTable.field_1 IN ('" . implode("','", $userStatus) . "')
  OR myTable.field_2 IN ('" . implode("','", $userStatus) . "')
  OR myTable.field_3 IN ('" . implode("','", $userStatus) . "'))";

在这种情况下创建变量是否有任何“缺点”?或者它不会影响性能,所以我们应该走“好读”的道路?

【问题讨论】:

  • 干:$userStatus = implode("','", $myObj->userStatus);

标签: php performance variables


【解决方案1】:

首先,您可以将implode("','", $userStatus) 预先计算为一个变量。这样,您不必多次重复 implode 函数。它更具可读性和更好的性能。

其次,最重要的是您以错误的方式处理数据!这种计算应该在您的数据库中完成。例如,您已将多对多关系转换为一对多。这降低了您的代码的可读性和效率。

第三,不要过度设计您的代码。如果您要进行操作,请在变量中进行操作以提高可读性而不是提高性能。性能通常取决于算法、结构和设计,而不是定义变量。

【讨论】:

    【解决方案2】:

    作为一个一般的做法,我不会分配一个新变量,除非我真的要以需要它的方式使用它。当然也有例外,可读性会显着提高。我认为你的例子根本达不到这个门槛。

    事实上,我认为您的具体示例,在这里分配另一个变量可能不清楚$userStatus 是什么。浏览代码时要跟踪的另一件事。

    当然,$myObj->userStatus 并没有什么“丑陋”的地方。

    无论如何,这里还有其他问题。永远不要将数据直接连接到 SQL 查询中。它至少需要转义,但绑定参数更好。否则,您将面临一大堆错误和安全问题。

    如果您使用命名参数,您会发现无论如何您只会使用一次$myObj->userStatus

    【讨论】:

      【解决方案3】:

      你应该试试下面的代码:

      $userStatus = $myObj->userStatus;
      //Some Code HEre
      
      $userStatusimp = implode(',', $userStatus);
      
      AND (myTable.field_1 IN ('" .$userStatusimp. "')
        OR myTable.field_2 IN ('" .$userStatusimp . "')
        OR myTable.field_3 IN ('" .$userStatusimp. "'))";
      

      【讨论】:

        【解决方案4】:

        第二条路是要走的路。更好阅读,如果您需要更改某些内容,它更易于维护。

        我不能说基于性能的事实,但我认为选项 1) 会工作得更快一些,但只要你不从事真正高性能的项目,差异应该不重要。

        【讨论】: