为什么这段代码输出1呢?
$t = true;
switch($t)
{
case 1*2:
echo 1;
}
$t = true;
switch($t)
{
case 1*2:
echo 1;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
$t = true;
switch($t)
{
case 1*2:
echo 1;
}
$t = true;
switch($t)
{
case 1*2:
echo 1;
}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
switch/case 手册 说:
true == 2
为 true。The manual for switch/case says:
And
true == 2
is true.switch
语句执行 松散比较 测试表达式与类型的case
标签中的表达式之间。在这种情况下,这意味着编译器会确定
true == 2
是否成立。由于任何非零整数比较都等于true
,因此采用分支并执行echo 1;
。这是一个不太直观的示例,其中完全相同的机制正在发挥作用。你可以用同样的逻辑来解释它:
我过去在向新手教授 PHP 时使用过这个例子,让他们理解松散类型语言是如何工作的。
A
switch
statement does loose comparison between the tested expression and the expressions in thecase
labels to the type.In this case, this means that it the compiler determines if
true == 2
. Since any nonzero integer compares equal totrue
, the branch is taken andecho 1;
is executed.Here's a less intuitive example where the exact same mechanism is in effect. You can explain it with the same logic:
I 've used this example in the past when teaching PHP to newbies, to get them to understand how a loosely typed language works.
在 PHP(以及大多数编程语言)中,当在条件语句中处理时,非零值意味着 true。在本例中,$t (true) 等于任何不为零的数字,因此它符合 case 条件。输出将为 1。
In PHP (and in the most of programming languages) a non-zero value means true when is treated in a conditional statement. In this case $t (true) is equal to any number different than zero, so it matches the case condition. The output will be 1.