PHP - 在if语句中分配值

n00*_*00b 4 php

前几天我读到在if语句中分配值并不是一个好主意.说实话,我实际上使用了很多,例如

if(isset($_POST) && $post = $_POST) {
  print_r($post)
}
Run Code Online (Sandbox Code Playgroud)

知道为什么那不是最优的吗?

Mar*_*ker 15

尤其是因为忘记赋值和相等运算符不同是一个常见的新手错误,因此它很容易导致混淆或难以检测的错误.

代码的可读性比任何微优化都重要

  • 可读性当然很重要。`if(isset($_POST) && $post = $_POST)` 完全可读。 (3认同)

Sar*_*raz 9

因为它不是最佳的,它是关于标准,惯例,条件需要比较而不是分配.

不要制造混乱,Noobs可能会坐几个小时调试问题!


You*_*nse 6

好吧,单独来看,逻辑运算符中的赋值并没有那么糟糕:

if ($id = $_GET['id']) {
Run Code Online (Sandbox Code Playgroud)

或者

while($row = mysql_fetch_assoc($res)) {
Run Code Online (Sandbox Code Playgroud)

我们经常使用。
尽管它仍然面临可读性错误或混合 ===操作符的危险。

但是在一个语句中混合逻辑和赋值运算符是不好的。这称为混淆和 Perl 只写样式,使阅读此代码变得更加困难。

所以,最好写成

if(isset($_POST)) {
  $post = $_POST;
  print_r($post);
}
Run Code Online (Sandbox Code Playgroud)

尽管这种特殊的说法是毫无意义的。
$_POST 始终在任何合理的环境中设置,并将其分配给另一个大多数时候不必要的变量