【问题标题】:Cast to a 32 bit integer may result in truncation PHP Propel?转换为 32 位整数可能会导致截断 PHP Propel?
【发布时间】:2015-01-14 17:57:34
【问题描述】:

查看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;
    }

为什么在文档中他们说转换为 int 的值可能会导致截断???是不是 int 保持在例如4000000000 在 64 位环境中?其实是这样的,为什么是这个“笔记”呢?

感谢关注!

【问题讨论】:

  • 毕竟不是所有的 PHP 安装都是 64 位的。在 32 位 PHP 安装中,int 的最大值为 2^31-1。
  • @MarcB 我知道,但是如果您阅读文档,他们似乎假设 64 位也是如此,但事实并非如此。

标签: php int propel


【解决方案1】:

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

对于 PHP 32 位,范围介于 ]-21474836482147483647[
对于 PHP 64 位,范围介于 ]-92233720368547758089223372036854775807[

我的测试(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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2019-08-02
    • 2016-01-22
    • 2019-06-21
    相关资源
    最近更新 更多