php - 使用 && 在同一语句中使用 IF 语句中定义的变量

标签 php if-statement

我似乎无法在同一语句的后面部分使用 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 evaluationTruthy 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/

相关文章:

php - 使用 PHP 和 cURL 发送数据时保留 post 字段的数据类型

C 如果每次都跳过一个

javascript - 让 For 循环在第一次迭代时正确执行时陷入困境

Python 和 SQLite : Check if an item exists in a database?

php - 注意第 10 行 : Undefined index: enroll in G:\xampp\htdocs\tg\1stSubmit. php

javascript - ajax 中的 jQuery 表单提交(带文件)

php - 使用 php 向后读取文件行(fgets)

php - 有没有什么办法可以在不安装服务器的情况下在本地测试PHP?

c - 我怎样才能将一个数字与其他数字进行比较而不用 C 语言将它们全部写出来?

python - 如果满足条件或发生错误则执行代码