PHP 字符串连接和算术运算

问题描述 投票:0回答:4

我刚开始学习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

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

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

php programming-languages weak-typing
4个回答
9
投票
发生这种情况是因为串联运算符比加法或减法运算符具有“更高的优先级”,但乘法和除法的优先级高于串联。

所以,你真正执行的是:

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

在第一种情况下,结果会变成这样:

"1 + 2 = 1" + $b

哪个 PHP 尝试将
"1 + 2 = 1"
转换为数字(因为

类型杂耍

)并得到 1,将表达式变成:
1 + 2

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

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

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

串联优先于加法和减法,但不优先于乘法或除法。所以

1
投票
echo "$a + $b = " . $a + $b;

相当于

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

PHP 会忽略第一部分,因为很难将其转换为数字,只留下
+ $b

如果你使用括号,应该没问题。

好吧,你发现了非常奇怪的行为,但是:)

0
投票
从算术运算符来看,除法和乘法具有最高优先级,因此它们在连接之前进行评估。

虽然添加和提取的优先级较低,所以首先评估左侧部分,然后添加/提取到右侧部分。但是 PHP 尝试从字符串中提取数值,但只有第一个字符是这样的,所以它用它来提取数值。

udin memiliki sebuah kolam berbentuk balok dengan panjang 80 cm,勒巴尔60厘米,丹·廷格尼亚40厘米,帕达·库洛姆·托特·泰特尼亚·阿坎·阿坎·迪伊斯·迪伊斯·奥利·贝拉帕·贝拉帕·帕拉帕·迪布特·迪布图特·迪布图尔·迪布图尔·尤利克·米特·帕克·帕克·帕克阿提卡

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.