在PHP中,(int)真正做了什么?

时间:2016-07-26 17:38:00

标签: php int

我知道使用(int)进行投射将数字向零舍入,但后来我开始用10以外的基数进行查找,现在我不确定(int)还有什么做了:

$a = 050; // an octal number

echo $a;   // output is ----> 40

然而

$a = '050';

echo (int)$a; // output is ----> 50

所以我认为(int)除了向零舍入之外还会剪切前导零。但是如果我使用二进制文件执行与第二个代码块(上面)相同的练习,我就得不到我的期望:

$a = '0b010';

echo (int)$a; // output is ----> 0

并以十六进制表示:

$a = '0x050';

echo (int)$a; // output is ----> 0

即使使用十进制科学记数法也会产生一个古怪的结果:

$a = 5e6;
$b = '5e6';

echo $a; // output is ----> 5000000
echo (int)$b; // output is ----> 5

使用(int)转换为整数真的意味着什么?除了在浮点数中去掉小数点和后面的所有内容之外,(int)是否逐个字符地解析一个强制转换字符串,并返回所有前导,数字,非零字符的串联?像这样:

function intCast($str) {

    $length = strlen($str);

    $returnVal = '';

    for($i = 0; $i < $length; $i++) {

        // Note: ord() values 48 to 57 represent 0 through 9 

        if ($returnVal === '' && ord($str[$i]) == 48) {

            continue; // leading zeroes are OK but don't concatenate

        } else if (ord($str[$i]) > 48 && ord($str[$i]) < 58) {

            $returnVal .= $str[$i];

        } else {

            break;

        }

    }


    return (strlen($returnVal) > 0) ? $returnVal : 0;

}

***请注意,此link似乎没有提供足够的答案。

1 个答案:

答案 0 :(得分:3)

'050'是一个字符串,PHP执行类型转换的第一项工作是规范化该字符串:

echo '050' + 1 -> echo '50' + 1 -> echo 50 + 1 -> echo 51 -> 51

050本身是一个八进制数,它已经是一个整数,所以PHP必须要做的就是将它转换为base10数作为输出:

echo 050 + 1 -> echo 40 + 1 -> echo 41 -> 41