我们什么时候应该为新变量赋值?

给定以下代码:


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) . "'))";


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


手掌心
浏览 125回答 3
3回答

守着一只汪

首先,您可以将 预计算implode("','", $userStatus)为变量。这样,您不必多次重复 implode 函数。它更具可读性并且具有更好的性能。其次,最重要的是您以错误的方式处理数据!这种计算应该在您的数据库中完成。例如,您已将多对多关系转换为一对多。这使您的代码可读性降低,效率降低。第三,不要过度设计你的代码。如果您要进行操作,请在变量中进行操作以提高可读性而不是提高性能。性能通常取决于算法、结构和设计,而不是定义变量。

哔哔one

作为一般做法,我不会分配新变量,除非我实际上要以需要它的方式使用它。当然也有例外,可读性会显着提高。我认为您的示例根本不符合该阈值。事实上,我认为你的具体例子,在这里分配另一个变量可能不清楚是什么$userStatus。浏览代码时要跟踪的是另一件事。当然,没有什么“丑陋”的$myObj->userStatus。无论如何,这里还有其他问题。永远不要将数据直接连接到 SQL 查询中。它至少需要转义,但绑定参数更好。否则,您将面临一大堆错误和安全问题。如果你使用命名参数,你会发现无论如何你只会使用$myObj->userStatus一次。

缥缈止盈

您应该尝试以下代码:$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. "'))";
打开App,查看更多内容
随时随地看视频慕课网APP