5

我有一个 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() 返回的值;

这是因为我只能返回一种 TRUE 的感觉吗?

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

有不同种类的 TRUE 吗?如果是这样,我该如何以这种方式比较它们?或者有没有更简单的方法?我想我可以在我的函数中放置第二个 IF 语句并通过函数传递我的第二个条件,但是我的函数就其用途而言不会被非常明确地定义。

我以前遇到过这个问题,不太清楚我在找什么。希望有人可以提供帮助。

4

2 回答 2

5
if (($match = match_this($valueA, $valueB)) && $x == 'x') 
    ^                                     ^

你错过了一组额外的括号。如果没有额外的括号$match = match_this($valueA, $valueB),首先执行 的评估,&&最后将结果分配给$match

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

PHP 运算符优先级

于 2012-10-26T14:34:19.667 回答
0
if ($match = match_this($valueA, $valueB))
           ^---wrong operator

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

as per the comments below, if you actually ARE wanting to do assignments within the if() structure, then you should slap a very-large-blinking-neon-bright comment/warning above the code to say that this is intended behavior. In most any language and most any other person looking at this code later on will assume it's a typo and change the assignment to an equality test.

于 2012-10-26T14:34:31.587 回答