将字符串转换为int

Ria*_*iaD 16 php type-conversion

我的代码

<?php
var_dump('0xD' * 1 );
var_dump((int)'0xD');
var_dump(intval('0xD'));
var_dump((float)'0xD');
Run Code Online (Sandbox Code Playgroud)

实际结果:

int(13)
int(0)
int(0)
float(0)
Run Code Online (Sandbox Code Playgroud)

为什么前两个条件的结果不一样?你能给我正确的文件吗?

我找到的只是

  • 类型转换:PHP中的类型转换与C中的类型相同:所需类型的名称在要转换的变量之前写在括号中.在某些类型之间进行投射时,可能并不明显会发生什么.有关更多信息,请参阅以下部分:...
  • 转换为整数:从字符串:请参见字符串转换为数字
  • 字符串转换为数字在数字上下文中计算字符串时,结果值和类型将按如下方式确定.

所以,据我所知,文档说直接转换为int并通过放入数字上下文应该是相同的.我的错是什么?

增加:在回答之前尝试检查第一个和第二个代码(和输出).

hak*_*kre 10

'0xD'是一个字符串.该文件明确规定了如何将字符串"铸造"成一个整数值(采摘(int) '0xD';此处为例):

在数值上下文中计算字符串时,结果值和类型将按如下方式确定.

如果字符串不包含任何字符'.','e'或'E',并且数值适合整数类型限制(由PHP_INT_MAX定义),则字符串将被计算为整数.在所有其他情况下,它将被评估为浮点数.

该值由字符串的初始部分给出.如果字符串以有效数字数据开头,则这将是使用的值.否则,该值将为0(零).有效数字数据是可选符号,后跟一个或多个数字(可选地包含小数点),后跟可选指数.指数是'e'或'E',后跟一个或多个数字.

字符串的初始部分'0xD'是一个数字0,因此就是它(int) 0.

不要将其与编写代码混合使用.如果你在代码中写它不是一个字符串,它是一个十六进制表示/整数表示法(Demo):

<?php

$value = eval("return 0xD;");

var_dump($value); # int(13)
Run Code Online (Sandbox Code Playgroud)

这并不能完全回答表达式'0xD' * 1导致的原因(int) 13,但到目前为止解释了其他所有内容以及整数值解释的两个规则在PHP中的应用.

我假设在PHP中转换为整数和整数上下文之间存在细微差别.如果字符串表示十六进制数,则在整数/浮点上下文中使用:

'0xD' * 1
Run Code Online (Sandbox Code Playgroud)

在此表达式中,'0xD'由于*运算符和1操作数,字符串将被计算为数字(请参阅类型杂项).这不是类型转换,因为没有转换语言构造.

看起来在这个表达式的情况下,字符串作为整数的解释是按字面意思(如指定的那样)完成的,但与进行转换时不同.

有人可能会说,在适用转换时以及适用字面解释时,它仍然没有记录.但是,使用类型转换可以解决任何此类问题(演示):

<?php

$value = '0xD';

var_dump($value); # string(3) "0xD"
var_dump($value * 1); # int(13)
var_dump((int) $value * 1); # int(0)
Run Code Online (Sandbox Code Playgroud)