如何在else if语句中获取返回结果?——PHP中else if内赋值并使用返回值的疑问
关于else if条件中获取方法返回结果的问题解答
首先直接给你答案:完全可以获取到$res,你代码里的写法本身就是正确的用法!
为什么这个写法可行?
在PHP中,条件表达式里是允许直接进行赋值操作的。执行顺序是这样的:
- 先执行
$res = RegexValidation::isMMYYShort($column),把方法的返回值赋值给变量$res - 接着判断这个赋值操作的结果(也就是
$res的值)是否为“真值”(比如非空数组、true、非零数值等) - 如果判断为真,就进入这个
else if的代码块,此时$res已经被成功赋值,你可以直接在代码块里使用它,就像你示例里的$res[1]和$res[2]一样。
在else if中获取返回结果的常用方法
方法1:直接在条件中赋值并判断(你当前的写法)
这是最简洁的写法,非常适合需要在代码块中复用方法返回值的场景:
} else if ($res = RegexValidation::isMMYYShort($column)) { $row[] = $this->setValue("mm", $res[1], $indexrow, $columnindex); $row[] = $this->setValue("yy", $res[2], $indexrow, $columnindex); }
⚠️ 注意:要确保方法的返回值逻辑符合PHP的“真值”判断。比如如果isMMYYShort返回false表示不匹配,返回数组表示匹配,那这个判断没问题;但如果方法可能返回被PHP视为“假”的有效值(比如0),那就要用精确判断,比如:
} else if (($res = RegexValidation::isMMYYShort($column)) !== false) { // 这里即使$res是0也会进入代码块 }
方法2:先赋值再判断(可读性优先)
如果觉得在条件里赋值的写法可读性较差,可以拆分步骤,不过在else if链里需要调整结构:
} else { $res = RegexValidation::isMMYYShort($column); if ($res) { $row[] = $this->setValue("mm", $res[1], $indexrow, $columnindex); $row[] = $this->setValue("yy", $res[2], $indexrow, $columnindex); } }
这种写法更直观,但会多一层嵌套,适合对代码可读性要求更高的场景。
内容的提问来源于stack exchange,提问作者Famida
相关产品推荐
相关产品推荐

