您好,我有以下代码,这让我感到困惑。它是如何打击这个案子的?
<?php
$concept = '0';
switch ($concept) {
case ($concept > '0'):
$score = 'Y';
break;
}
?>
您好,我有以下代码,这让我感到困惑。它是如何打击这个案子的?
<?php
$concept = '0';
switch ($concept) {
case ($concept > '0'):
$score = 'Y';
break;
}
?>
你的开关在 $concept; 你的情况是 ($concept > '0'),它的评估结果是 FALSE,所以你说的很有效case FALSE:
;将该 FALSE 与开关条件 ($concept) 进行比较,即“0”;松散类型将“0”与 FALSE 进行比较,结果为 TRUE;因此案件成立。
我不认为您真正了解 switch 语句的实际作用。但它不仅仅是 if 语句的替代方案
从switch
文档:
注意:请注意,开关/案例确实比较松散。
检查 falsy-ness'0'
,这很糟糕,我知道。false
正如您在链接的 tbl 中看到的那样,您的案例评估为and ('0' == false) === true
。
我会将您的switch
声明更改为:
switch(true)
{
case ($concept >'0'):
echo 'Impossible';
break;
}
此外,就像文档所说:switch
是一个执行松散比较的循环结构。您不能自己选择比较运算符。如果您想根据$concept
一系列案例检查 的值,您必须编写:
switch($concept)
{
case '0': echo 'a zero string'; break;
case '1': echo 'a 1 concept'; break;
}
它是这样工作的。
<?php
$concept = '0'; // 1. This is a string
switch ($concept) { // 3. boolean FALSE is compared to $concept,
// which forces $concept to be cast to boolean,
// thus the comparison is FALSE == FALSE which equals TRUE
case ($concept > '0'): // 2. ($concept > '0') evaluates to boolean FALSE
$score = 'Y';
break;
}
请注意我在评论中添加的数字,以显示事物的评估顺序。(非常简单)。
你可以做些什么来避免类型问题是这样的:
<?php
$concept = '0';
switch (TRUE) {
case ($concept > '0'):
$score = 'Y';
break;
}
它所做的是将所有案例条件与 TRUE 进行比较,并且更像您所期望的那样工作。请注意,这种 switch 的使用有点不合常规,但可以避免 PHP 中的一些类型转换问题。
它将 $concept 与 $concept > '0' 的结果进行比较
$concept = '0' // '0' == false
$concept > '0' // '0'>'0' == false
您的声明等于:
switch (false){
case (false):
$score = 'Y';
break;
}
您的情况是匹配的,因为这是false==false
如何发生的首先采用$concept
初始值为字符串“0”的开关条件。
然后让我们来看看你的 case 语句,$concept > 0
这个表达式false
在执行 switch 块之前评估和评估,因为 switch 语句将块值与调用值匹配。
然后,当进行匹配时,您的$concept
value = "0" 将被转换为 boolean value false
。
所以false==false