强制转换为32位整数可能导致截断PHP Propel?

时间:2015-01-14 17:57:35

标签: php int propel

查看Propel的源代码(PHP ORM库),我在propel / propel1 / runtime / lib / query / Criteria.php文件中找到了这个方法:

  /**
     * Set offset.
     *
     * @param int $offset An int with the value for offset.  (Note this values is
     *                    cast to a 32bit integer and may result in truncation)
     *
     * @return Criteria Modified Criteria object (for fluent API)
     */
    public function setOffset($offset)
    {
        $this->offset = (int) $offset;

        return $this;
    }

为什么在doc注释中他们说转换为int的值可能会导致截断?不是int保持在例如在64位环境中4000000000?实际上,它是,为什么这个"注意"?

感谢您的关注!

1 个答案:

答案 0 :(得分:3)

整数的最大和最小大小取决于PHP的构建:32或64位(操作系统和处理器也必须遵循)

对于 PHP 32位,范围介于] -2147483648 2147483647 [
对于 PHP 64位,范围介于] -9223372036854775808 9223372036854775807 [红

我的测试( PHP 32位,WINDOWS 7 64位,Intel CORE i3 64位):

<?php
$i = (int)2147483647;
var_dump($i);

将输出:

int(2147483647)

第二次测试(只增加1的最后一个值)

<?php
    $i = (int)2147483647;
    var_dump($i);

将输出:

int(-2147483648)

最后:要确定环境中整数的最大值,只需打印此

即可
var_dump(PHP_INT_MAX);