字符串和算术运算的 PHP 连接

标签 php programming-languages weak-typing

不久前我开始学习PHP,遇到了这个问题:

<?php

$a = 1;
$b = 2;

echo "$a * $b  = " . $a * $b;
echo "<br />";

echo "$a / $b  = " . $a / $b;
echo "<br />";

echo "$a + $b  = " . $a + $b;
echo "<br />";

echo "$a - $b  = " . $a - $b;
echo "<br />";

我得到以下输出:

1 * 2 = 2
1 / 2 = 0.5
3
-1

输出中的最后两行不是我所期望的。

这是为什么?如何评估这些表达式?我正在努力更好地理解这门语言。

最佳答案

发生这种情况是因为连接运算符有一个 higher precedence比加法或减法运算符,但乘法和除法的优先级高于串联。

所以,您真正执行的是:

echo ("$a + $b  = " . $a) + $b;
echo ("$a - $b  = " . $a) - $b;

在第一种情况下,它变成了这样:

"1 + 2 = 1" + $b

PHP 尝试将 "1 + 2 = 1" 转换为数字(因为 type juggling )并得到 1,将表达式转换为:

1 + 2

这就是你得到 3 的原因。相同的逻辑可以应用于减法条件。

相反,如果您在计算两边加上括号,您将获得所需的输出。

echo "$a + $b  = " . ($a + $b);
echo "$a - $b  = " . ($a - $b);

关于字符串和算术运算的 PHP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993240/

相关文章:

c - 在输入验证中使用 __typeof__

Java - 为什么我不能部分键入变量?

language-agnostic - 不需要声明变量类型的语言的质量是否是弱类型或动态类型的示例

javascript - 将路径传递给 php 返回未定义

php - 如何将 'like' 与 Codeigniter 事件记录分组?

php - alias 可以在 $row 中工作吗?

php - 如何在 Google Drive API v3 PHP 中列出特定文件夹中的文件

user-interface - 我应该学习什么语言来创建命令行脚本和 GUI?

java - 最佳(scala 和其他针对 java vm 的语言)优化

php - PHP 中的类型提示返回值/函数