Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么答案是15?_Php_String_Numbers - Fatal编程技术网

Php 为什么答案是15?

Php 为什么答案是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),字符串将作为整数计算。在所有其他方面 在某些情况下,它将作为浮动进行评估 该值由字符串的初始部分给出。如果字符串 从有效的数字数据开始,这将是

对于下面的代码片段,答案是15

$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没有定义变量类型。所以当你做加法运算时