";如果“;语句被忽略


"if" statement is ignored

对此可能有一个非常简单的修复方法,但我对php一无所知。我一直在想办法解决这个问题,但无济于事。这是代码:

echo $slot['slot_type'];
echo "<br><br>";
if ($slot['slot_type']='tree')          echo "This place is full of life, and can be used for hunting, gathering, logging, or other activities.";
if ($slot['slot_type']='town_hall')     echo "The town hall houses the governors, and is propriety of the King.";
if ($slot['slot_type']='farm1')     echo "Townspeople attempt to grow a selection of wild plants on these crops, hoping for a steady food supply.";
if ($slot['slot_type']='farm2')     echo "Farming is hard work, but a full storehouse of food is a great comfort.";

echo $slot['slot_type'];的第一行是我试图理解为什么我的"if"语句不起作用。但是,它会打印正确的字符串,在本例中为"树"。

因此,在实践中,浏览器没有打印其中一个建议的文本字符串,而是打印所有四个字符串,就好像它完全忽略了我的if语句一样。再说一遍,很抱歉问了这么愚蠢的问题。

您需要这样使用它:

if ($slot['slot_type']=='tree')

您正在将值插入$slot['slot_type'],而不是进行比较。

您需要将所有单个=更改为==或其他一些逻辑检查。

实际上,您要做的是将条件右侧的值分配给$slot['slot_type'],该值将始终返回true。

在这里阅读php手册http://uk.php.net/manual/en/language.operators.php

顺便说一句,使用switch语句可能会更好地创建if结构。

您在if语句中使用了赋值运算符=。您应该使用比较运算符==

详细说明这是如何工作的:if语句将评估给定的条件,看看它是否匹配。使用当前的赋值运算符,PHP引擎将实际完成该命令(即将值tree赋值给slot_type),该命令成功完成后返回true。然后执行if语句的其余部分。其余的if语句也会发生同样的情况(因为您正在无错误地为slot_type重新赋值),然后它也会执行其他分支。

将==更改为==。This:=只用于给定变量值(赋值),This==用于将其与某物进行比较。

我的看法:总是在选项卡中打开php.net:

http://uk3.php.net/manual/en/language.operators.assignment.php

http://uk3.php.net/manual/en/language.operators.comparison.php

CASE 1:=(赋值)

$var = 'hello';

情况2:==

类型杂耍后的相等

if(0 == "a") {
    print("hi");
}

*将打印"hi",因为字符串"a"实际上会被PHP 转换为0

情况3:===

身份测试(类型必须相同)

if(0 === "a"){
    print("hi");
}

*将不会打印"hi",因为这两个操作数显然不是同一类型。

在您的案例中,您需要案例2来测试相等性,或者您可以使用案例3。