Php 为什么答案是15?
对于下面的代码片段,答案是15Php 为什么答案是15?,php,string,numbers,Php,String,Numbers,对于下面的代码片段,答案是15 $a = '5 USD'; $b = 10; echo $a + $b; 但是在变量$a中,如果5在'USD'之间或'USD'之后,则输出为10。为什么会这样?来自: 在数值上下文中计算字符串时,结果值 和类型确定如下 如果字符串不包含任何字符“.”、“e”或“e” 并且数值符合整数类型限制(如 PHP_INT_MAX),字符串将作为整数计算。在所有其他方面 在某些情况下,它将作为浮动进行评估 该值由字符串的初始部分给出。如果字符串 从有效的数字数据开始,这将是
$a = '5 USD';
$b = 10;
echo $a + $b;
但是在变量$a
中,如果5
在'USD'
之间或'USD'
之后,则输出为10
。为什么会这样?来自:
在数值上下文中计算字符串时,结果值
和类型确定如下
如果字符串不包含任何字符“.”、“e”或“e”
并且数值符合整数类型限制(如
PHP_INT_MAX),字符串将作为整数计算。在所有其他方面
在某些情况下,它将作为浮动进行评估
该值由字符串的初始部分给出。如果字符串
从有效的数字数据开始,这将是使用的值。
否则,该值将为0(零)。有效的数字数据是
可选符号,后跟一个或多个数字(可选包含
小数点),后跟可选指数。指数是一个
“e”或“e”后跟一个或多个数字
字面上:
$a+b
表示数字+数字
“5美元”
以有效的数字数据开头,因此PHP将其转换为5
“USD 5”
或“U5SD”
以无效的数字数据开头,因此PHP将其转换为0
UPDv1:
另外,请查看此:
UPDv2: 无论零填充效果如何,PHP都无法将字符串值类型转换为八进制。不过,正如前面提到的,PHP能够将字符串类型转换为十六进制
<?php
header('Content-Type: text/plain');
function plus($a, $b){
echo $a, ' + ', $b, ' = ', $a + $b, PHP_EOL;
}
plus(008, 12); // Invalid octal, PHP assumes it is 0. Result: 12.
plus('008', 12); // Invalid octal? No, it is decimal. Result: 20.
plus(0x0F, 1); // Valid hexadecimal. Result: 16.
plus('0x0F', 1); // Valid hexadecimal. Result: 16.
plus('0x0X', 1); // Invalid hexadecimal, PHP assumes it is 0. Result: 1.
?>
“字符串到数字转换”文档中未提及此项。来源:
在数值上下文中计算字符串时,结果值
和类型确定如下
如果字符串不包含任何字符“.”、“e”或“e”
并且数值符合整数类型限制(如
PHP_INT_MAX),字符串将作为整数计算。在所有其他方面
在某些情况下,它将作为浮动进行评估
该值由字符串的初始部分给出。如果字符串
从有效的数字数据开始,这将是使用的值。
否则,该值将为0(零)。有效的数字数据是
可选符号,后跟一个或多个数字(可选包含
小数点),后跟可选指数。指数是一个
“e”或“e”后跟一个或多个数字
字面上:
$a+b
表示数字+数字
“5美元”
以有效的数字数据开头,因此PHP将其转换为5
“USD 5”
或“U5SD”
以无效的数字数据开头,因此PHP将其转换为0
UPDv1:
另外,请查看此:
UPDv2: 无论零填充效果如何,PHP都无法将字符串值类型转换为八进制。不过,正如前面提到的,PHP能够将字符串类型转换为十六进制
<?php
header('Content-Type: text/plain');
function plus($a, $b){
echo $a, ' + ', $b, ' = ', $a + $b, PHP_EOL;
}
plus(008, 12); // Invalid octal, PHP assumes it is 0. Result: 12.
plus('008', 12); // Invalid octal? No, it is decimal. Result: 20.
plus(0x0F, 1); // Valid hexadecimal. Result: 16.
plus('0x0F', 1); // Valid hexadecimal. Result: 16.
plus('0x0X', 1); // Invalid hexadecimal, PHP assumes it is 0. Result: 1.
?>
“字符串到数字转换”文档中没有提到它。因为
php > echo (int)"a";
0
因此,如果您向PHP可执行文件提供
php > "USD 5" + "10"
它将两个操作数强制转换为整数:
php > (int)"USD 5" + (int)"10"
因此,您将收到0+10
的结果,因为
php > echo (int)"a";
0
因此,如果您向PHP可执行文件提供
php > "USD 5" + "10"
它将两个操作数强制转换为整数:
php > (int)"USD 5" + (int)"10"
因此,您将收到0+10的结果
请参见
字符串到数字的转换
在数值上下文中计算字符串时,结果值和类型的确定如下所示
如果字符串不包含任何字符“.”、“e”或“e”,并且数值符合整数类型限制(由PHP_INT_MAX定义),则字符串将作为整数计算。在所有其他情况下,它将作为浮动进行评估
该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,则将使用该值。否则,该值将为0(零)。有效数字数据是可选符号,后跟一个或多个数字(可选包含小数点),后跟可选指数。指数是一个“e”或“e”,后跟一个或多个数字。
示例可在手册中找到(上面的链接)
回答你的问题
$a = '5 USD'; // The string starts with number, so by an implicit cast to int, it will be 5
$b = 10;
echo $a + $b; // = 15
在你写的另一个例子中
$a = 'USD 5'; // The string does not start with a number, so by an implicit cast to int, it will be 0
$b = 10;
echo $a + $b; // = 10
有关此转换的更多信息,请参阅。请参阅
字符串到数字的转换
在数值上下文中计算字符串时,结果值和类型的确定如下所示
如果字符串不包含任何字符“.”、“e”或“e”,并且数值符合整数类型限制(由PHP_INT_MAX定义),则字符串将作为整数计算。在所有其他情况下,它将作为浮动进行评估
该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,则将使用该值。否则,该值将为0(零)。有效数字数据是可选符号,后跟一个或多个数字(可选包含小数点),后跟可选指数。指数是一个“e”或“e”,后跟一个或多个数字。
示例可在手册中找到(上面的链接)
回答你的问题
$a = '5 USD'; // The string starts with number, so by an implicit cast to int, it will be 5
$b = 10;
echo $a + $b; // = 15
在你写的另一个例子中
$a = 'USD 5'; // The string does not start with a number, so by an implicit cast to int, it will be 0
$b = 10;
echo $a + $b; // = 10
有关此转换的更多信息,请参阅。它被称为“松散键入”和“键入杂耍”,您能再解释一下@Mark Barkert吗?我链接的页面几乎说明了一切。。。。您将加法运算符与另一个(整数)值(10)一起使用,因此PHP尝试通过将字符串转换为可添加到10Yeah的整数值来进行添加。感谢@MarkBakerPHP没有定义变量类型。所以当你做加法运算时