Php 多IF语句条件

Php 多IF语句条件,php,function,if-statement,conditional-statements,statements,Php,Function,If Statement,Conditional Statements,Statements,我有一个PHP脚本,它通过使用PHP函数preg_match的自定义函数运行一个值数组。它正在寻找一个匹配项,其中正则表达式为$valueA,要搜索的字符串为$valueB,如果找到匹配项,它将返回$match,否则我不希望运行if语句 现在,如果函数找到匹配项(换句话说,是TRUE),那么运行IF语句没有问题 但是,如果我想比较一个附加条件来检查它是否也是真的,并且只在两者都是真的情况下运行if语句,我就会遇到问题 if ($match = match_this($valueA, $value

我有一个PHP脚本,它通过使用PHP函数preg_match的自定义函数运行一个值数组。它正在寻找一个匹配项,其中正则表达式为$valueA,要搜索的字符串为$valueB,如果找到匹配项,它将返回$match,否则我不希望运行if语句

现在,如果函数找到匹配项(换句话说,是TRUE),那么运行IF语句没有问题

但是,如果我想比较一个附加条件来检查它是否也是真的,并且只在两者都是真的情况下运行if语句,我就会遇到问题

if ($match = match_this($valueA, $valueB) && $x == 'x')
{
    //do this
}
当这两个条件都为真时,语句不是正常运行,而是从$match输出1,而不是我的$match值应该是什么

我可以看到发生了什么。IF语句只是将一个布尔值TRUE返回到$match中,而不是从match_this()返回的值

这是因为我只能返回一种真实感吗

我可以通过使用两个嵌套的IF语句来解决这个问题,但是为了代码简洁,我希望能够比较IFs中的多个条件,其中包括返回值的函数

真的有不同的类型吗?如果是,我如何以这种方式比较它们?还是有更简单的方法?我想我可以把第二个IF语句放在我的函数中,然后通过函数传递第二个条件,但是这样我的函数就不能很清楚地定义它的用途了

我以前遇到过这个问题,不知道我在找什么。希望有人能帮忙

if (($match = match_this($valueA, $valueB)) && $x == 'x') 
    ^                                     ^
你错过了一组额外的括号。 如果在
$match=match\u this($valueA,$valueB)
周围没有额外的括号,则首先执行
&&
的计算,最后将结果分配给
$match

或者,您可以使用
(其优先级低于赋值
=
),而不是
&

您应该使用
==
进行相等性测试。现在您只需分配match_this的返回值。你的另一个if()也一样


根据下面的注释,如果您确实想要在if()结构中执行赋值,那么您应该在代码上方打出一个非常大的闪烁霓虹灯注释/警告,说明这是预期行为。在大多数语言中,以及在以后查看此代码的大多数其他人都会认为这是一个打字错误,并将赋值更改为相等测试。

运算符优先级。将
&&
替换为
可能是您想要表达的内容。请参阅,是的,在PHP中有多种表达式可以计算为
true
。(1,-1,“你好”,请参阅。有用的文档。谢谢。-1他不想检查是否平等。他想分配返回值…那么
&&$x='x'
的意义是什么?这归结为$match是真的,因为赋值的返回值就是被赋值的值。所以它是
$match=match_这个(..)和&true
。if()测试中的赋值总是输入错误OP尝试执行的操作与此等效:
$match=match_this(…);如果($match&&$x=='x'){}
他为什么会这么说?“当这两个条件都为真时,语句不是正常运行,而是从$match输出一个1,而不是我的$match值应该是什么。”然后,他应该明确地将代码分成一个赋值,然后是一个单独的测试。看看它现在造成的混乱——如果有人在路上遇到这个代码,他现在得到的将是咬他的屁股。在if分配任务是个坏主意。啊,我明白了。这正是我需要知道的。我现在看到了解决办法,这似乎很合乎逻辑。谢谢你的快速回复。
if (($match = match_this($valueA, $valueB)) && $x == 'x') 
    ^                                     ^
if ($match = match_this($valueA, $valueB))
           ^---wrong operator