Php 如何在if语句中组合AND和OR运算符?

Php 如何在if语句中组合AND和OR运算符?,php,Php,我有以下字符串,其中包含作为字符串的域的一部分 $scheme="http"; $host="example.com"; $filename="demo.php"; $request_uri="/folder/demo.php"; $host和$filename变量其中一个是可选的。 我使用以下代码检查字符串是否包含正确的值,打印成功的消息,否则打印错误消息 if($scheme ="http" OR $host ="example.com" & $filename ="demo.ph

我有以下字符串,其中包含作为字符串的域的一部分

$scheme="http";
$host="example.com";
$filename="demo.php";
$request_uri="/folder/demo.php";
$host和$filename变量其中一个是可选的。 我使用以下代码检查字符串是否包含正确的值,打印成功的消息,否则打印错误消息

if($scheme ="http" OR $host ="example.com" & $filename ="demo.php" & $request_uri ="/folder/demo.php")
{echo "Sucessful";}
else
{echo "Fail";}
它没有像预期的那样工作,我每次都取得了成功。我认为if语句中忽略了AND运算符

有什么想法吗

if( $scheme == "http"
    && ($host == "example.com" || $filename == "demo.php")
    && $request_uri == "/folder/demo.php"
) {
    echo "Sucessful";
} else {
    echo "Fail";
}
&&和| |是PHP的and和OR运算符。还=为变量赋值,不进行相等性比较。使用==或===进行比较


另外,您的书面需求声明似乎与您的代码不匹配。。。所以我对逻辑做了一点修改,加入了分组逻辑。从书面记录来看,似乎需要$scheme和$request_uri测试,并且需要$host或$filename。您的代码似乎与此不匹配。如果我误解了您的书面要求,请根据您的要求更改和和。请注意,将长布尔表达式拆分为多行,并使用to分组逻辑通常有助于正确处理。

&这是一种明智的做法。您可能需要使用&&.=作为赋值。您可能需要使用==&这是一个位运算符。或具有比| |更低的优先级,就像和具有比&&更低的优先级一样。而且|是按位的。我可能想读书。更不用说=是赋值。如果您使用&&和|和| |。按位&具有更高的优先级,后跟|和&&和| |。进行比较时,您需要知道哪个优先级较高,并相应地放置括号。a | | b&&c将作为b&&c执行,结果是| | a。这就是为什么您会有一个| | b&&c,并且=用于赋值,而不是比较。https不是有效的方案?在处理这个过程中,读取正则表达式可能比拆分位然后进行比较更容易;不确定数据来自哪里,所以可能不是…为什么OP要尝试这个?一个好的答案总会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。好的,先生。我添加了一些评论。我不认为我需要完全解释清楚。你应该完全解释清楚,因为一个新手可能会找到你的答案,但仍然不明白你做了什么,或者你为什么那样做。您还没有解释如何对OR语句进行分组,只是解释了运算符。上面的评论也提到了运算符优先级,这一点非常重要。同意。将来也行。顺便说一句,我一边打我的答案和评论,一边假装参加一个非常无聊的工作会议,这解释了我的简短:谢谢,杰伊。这是我没有解释的。答案已更新。