为什么这段代码输出1呢?

发布于 2024-10-22 06:38:41 字数 80 浏览 3 评论 0原文

$t = true;
switch($t)
{
    case 1*2:
        echo 1;
}
$t = true;
switch($t)
{
    case 1*2:
        echo 1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月朦胧 2024-10-29 06:38:41

switch/case 手册 说:

请注意,switch/case 的比较松散。

true == 2 为 true

The manual for switch/case says:

Note that switch/case does loose comparison.

And true == 2 is true.

柏拉图鍀咏恒 2024-10-29 06:38:41

switch 语句执行 松散比较 测试表达式与类型的 case 标签中的表达式之间。

在这种情况下,这意味着编译器会确定 true == 2 是否成立。由于任何非零整数比较都等于 true,因此采用分支并执行 echo 1;

这是一个不太直观的示例,其中完全相同的机制正在发挥作用。你可以用同样的逻辑来解释它:

$foo = 'hello';
switch($foo) {
    case 'A' || 'B':
        echo "Test succeeded";
}

我过去在向新手教授 PHP 时使用过这个例子,让他们理解松散类型语言是如何工作的。

A switch statement does loose comparison between the tested expression and the expressions in the case labels to the type.

In this case, this means that it the compiler determines if true == 2. Since any nonzero integer compares equal to true, the branch is taken and echo 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:

$foo = 'hello';
switch($foo) {
    case 'A' || 'B':
        echo "Test succeeded";
}

I 've used this example in the past when teaching PHP to newbies, to get them to understand how a loosely typed language works.

就此别过 2024-10-29 06:38:41

在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文