我目前正在从HTML,CSS和JS背景学习PHP,我遇到了一些让我感兴趣的意外行为。因此,我尝试了以下代码。
似乎写入时返回语句是这样写的,算术之前的所有内容都被删除/不呈现。
代码:
<?php
function add($num, $num2) {
return $num."+".$num2." = ".$num + $num2."<br>";
}
echo add(10, 7) . add(20, 1);
?>
输出:
17<br>
21<br>
但是,当我将第一个变量/参数从$num
更改为$num2
时,似乎第一个变量和+
运算符之间的每一个都被删除了。
代码:
<?php
function add($num, $num2) {
return $num2."+".$num2." = ".$num + $num2."<br>";
}
echo add(10, 7) . add(20, 1);
?>
输出:
14<br>
2<br>
在JS中trying后,我意识到在算术方程周围加上括号会输出预期的结果。
代码:
<?php
function add($num, $num2) {
return $num."+".$num2." = ".($num + $num2)."<br>";
}
echo add(10, 7) . add(20, 1);
?>
输出:
10+7 = 17<br>
20+1 = 21<br>
(同时制作一个$sum
变量可以解决问题)
我的问题是,通过不将方括号括在方程式周围会导致意外行为的原因是什么?
答案 0 :(得分:2)
PHP如何知道您不想接受此$num."+".$num2." = ".$num
并将其算术地添加到此$num2."<br>"
?除非您使用括号使$num + $num2
先发生。
在第一个例子中:
$num."+".$num2." = ".$num
等同于字符串:10+7=10
,然后:
$num2
等同于7
。
当您尝试添加+
时,字符串10+7=10
必须转换为整数10
,并且当添加到7
时,您会17
字符串<br>
被连接起来。
请参阅PHP: String Conversion to Numbers
括号:
$num."+".$num2." = ".($num + $num2)."<br>";
您将字符串10+7=
与10+7
(17
)连接在一起,并与字符串<br>
连接。
答案 1 :(得分:2)
您看到的行为是“类型杂耍”的结果。
因为PHP不是严格类型的,所以在需要时(或假设解释器需要)可以将字符串解释为整数,反之亦然。所以数据类型被转换,如果你不小心会导致问题。在许多其他语言中,如果您将字符串视为整数或整数(如字符串),则会出现错误。例如,JavaScript有String.parseInt()
来明确更改类型。
口译员正在做的大致如下,一步一步:
$num
- 建立一个值为10
10."+"
- 将整数与字符串连接起来
10
变为"10"
),并附加加号"10+"
"10+".$num2
- 将字符串与整数
"10+7"
"10+7"." = "
- 连接2个字符串
"10+7 = "
"10+7 = ".$num
- 将字符串与整数连接起来
"10+7 = 10
"10+7 = 10" + $num2
- 字符串和整数之间的算术计算
"10+7 = 10"
拉出10,然后点击+
并停止寻找数字。17
; 17."<br>"
- 整数和字符串的连接
<br>
17<br>
。供参考: