我似乎无法在同一语句的后面部分使用 if 语句中定义的变量。有没有解决的办法?声明如下:
if ($cat = getCat($item) &&
($masterCat= getVC($cat) || $masterCat= getTC($cat))) {
echo "success";
} else {
echo "fail";
}
如您所见,$cat 是在第一部分中定义的。如果该部分评估为 False,则其他部分将不会运行。我的问题是我得到了
Undefined variable: cat
即使在评估 && 运算符的 RHS 之前调用了 getCat 并定义了 $cat。
构建这段代码我了解了 short circuit evaluation和 Truthy values但现在我一直在尝试“一条线”。我可以嵌套 if 语句,但想知道是否存在三个可能的失败点,如果有一种方法可以做到这一点,其中“失败”部分只定义一次(它在实际代码中更大,而不仅仅是回显“失败”;)
功能如下
function getCat($pItem) {
//looks up $pItem and returns a category or null if $pItem doesn't exist
}
function getVC($pCat) {
//looks up $pCat quickly, returns master category or null if not in quick lookup table
}
function getTC($pCat) {
//looks up $pCat thoroughly,
//returns master category OR
//returns null if $pCat has expired (shouldn't happen but prevents crashing if it ever does)
}
最佳答案
您了解了短路评估,您的下一课应该包括 operator precedence :-)
简而言之:&&
绑定(bind)比 =
更强,因此代码的计算方式如下:
$cat = (getCat($item) && ($masterCat = (getVC($cat) || $masterCat = getTC($cat)))
括号内的$cat
确实还没有定义。简单修复:自己添加括号:
if (($cat = getCat($item)) &&
(($masterCat = getVC($cat)) || ($masterCat = getTC($cat)))) {
echo "success";
} else {
echo "fail";
}
回复:代码风格,条件语句中的赋值在 PHP 中通常被认为是一个坏主意。也就是说,因为 future 的读者无法快速区分“聪明”和有缺陷的 ==
并且需要考虑理解这种结构。
要学习 PHP 语法,您的代码就可以了,但在生产环境中,您可能需要遵循@FatBoyXPC 的建议。
关于php - 使用 && 在同一语句中使用 IF 语句中定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42673811/