为了账号安全,请及时绑定邮箱和手机立即绑定

添加和连接时,PHP感到困惑

添加和连接时,PHP感到困惑

PHP
陪伴而非守候 2020-01-05 13:00:58
我有以下代码:<?php    $a = 1;    $b = 2;    echo "sum: " .  $a + $b;    echo "sum: " . ($a + $b);?>当我执行代码时,我得到:2sum: 3为什么"sum:"在第一个回显中无法打印字符串?将加法放在括号中似乎很好。是否在任何地方都记录了这种奇怪的行为?
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

这两个运算符的加法+运算符和串联.运算符都具有相同的运算符优先级,但是由于它们保持关联,因此它们的计算方式如下:


echo (("sum:" . $a) + $b);

echo ("sum:" . ($a + $b));

因此,您的第一行首先进行连接,最后得到:


"sum: 1" + 2

(现在,由于这是一个数字上下文,因此您的字符串将转换为整数,因此最终得到0 + 2,然后得到结果2。)



查看完整回答
反对 回复 2020-01-06
?
交互式爱情

TA贡献1712条经验 获得超3个赞

如果查看列出PHP运算符priority的页面,则会看到串联运算符.和加法运算符+具有相同的优先级,并且具有左关联性。这意味着操作完全按照代码所示从左到右完成。让我们看一下:


$output = "sum: " . $a;

echo $output, "\n";

$output = $output + $b;

echo $output, "\n";

这给出以下输出:


sum: 1

2

串联有效,但是您随后尝试将字符串添加sum: 1到number中2。不以数字开头的字符串的计算结果为0,因此等价于0 + 2,结果为2。


正如您在问题中建议的那样,解决方案是将加法运算括在方括号中,以便将它们一起执行,然后将这些运算的结果连接在一起。


echo "sum: " . ($a + $b);



查看完整回答
反对 回复 2020-01-06
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

由于您使用语言构造echo,因此可以使用逗号将附加内容与串联分开:


echo "sum: " , $a + $b;

可以正常工作。


查看完整回答
反对 回复 2020-01-06
  • 3 回答
  • 0 关注
  • 311 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信