我有一个PHP脚本,它通过我自己的自定义函数运行一系列值,该函数使用PHP函数preg_match。它正在寻找与我的正则表达式为$ valueA的匹配,并且我要搜索的字符串为$ valueB,如果找到匹配,则将其返回到$ match,否则我不希望我的IF语句运行。
现在,如果函数找到一个匹配项(换句话说,为TRUE),我运行这个IF语句没问题;
if ($match = match_this($valueA, $valueB))
{
//do this
}
然而,如果我想比较一个额外条件来检查它是否也为TRUE,并且只在两者都为TRUE时运行IF语句,我会遇到问题;
if ($match = match_this($valueA, $valueB) && $x == 'x')
{
//do this
}
当两个条件都为TRUE时,而不是正常运行的语句,我最终从$ match输出1而不是我的$ match值应该是。
我可以看看发生了什么。我的IF语句只是将一个文字布尔值TRUE返回到$ match,而不是我从match_this()返回的值;
这是因为我只能返回一种真实感吗?
我可以通过使用两个嵌套的IF语句解决问题,但为了清晰的代码,我希望能够比较我的IF中包含返回值的函数的多个条件。
有不同种类的真实吗?如果是这样,我如何以这种方式比较它们?或者有更简单的方法吗?我想我可以在我的函数中放入第二个IF语句并通过函数传递我的第二个条件,但是我的函数在其目的方面不会非常明确地定义。
之前我遇到过这个问题,并不太清楚我在寻找什么。希望有人可以提供帮助。
答案 0 :(得分:5)
if (($match = match_this($valueA, $valueB)) && $x == 'x')
^ ^
你错过了一组额外的括号。
如果$match = match_this($valueA, $valueB)
周围没有额外的括号,则首先执行&&
的评估,最后将结果分配给$match
。
或者,您可以使用and
(优先级低于作业=
)而不是&&
<强> PHP Operator Precedence 强>
答案 1 :(得分:1)
if ($match = match_this($valueA, $valueB))
^---wrong operator
您应该使用==
进行相等性测试。现在你只需要分配match_this的返回值。同上你的其他if()
根据下面的评论,如果你真的想要在if()结构中进行分配,那么你应该在代码上面发出一个非常大的闪烁霓虹灯亮的评论/警告,说这是打算行为。在大多数语言和大多数其他人稍后查看此代码将假定它是一个拼写错误并将赋值更改为相等测试。