【问题标题】:PHP: Converting integer to int - getting errorPHP:将整数转换为 int - 出现错误
【发布时间】:2013-01-10 13:43:26
【问题描述】:

我知道 PHP 中的 int 和 integer 之间并没有什么不同。我一定是错的。

我将一个整数值传递给一个仅在该值上具有 int 的函数。像这样:-

$new->setPersonId((int)$newPersonId); // Have tried casting with (int) and intval and both

我的另一面:-

    public function setPersonId(int $value) {
        // foobar
    }

现在,当我跑步时 - 我收到消息:-

“PHP 可捕获的致命错误:传递给 setPersonId() 的参数 1 必须是 int 的实例,给定整数”

我已尝试使用 (int) 和 intval() 进行调用。

有什么想法吗?

【问题讨论】:

  • PHP 不支持标准数据类型(int、doubles)的类型提示,但支持对象的类型提示。
  • 当然 - 我也读过 - 那么解决方案是什么?
  • 从公共函数 setPersonId(int $value) 中移除 'int'
  • 正如我所提到的,我已经阅读了这篇文章。

标签: php casting


【解决方案1】:

PHP 中的类型提示仅适用于对象而非标量,因此 PHP 期望您传递“int”类型的对象。

您可以使用以下解决方法

public function setPersonId($value) {
    if (!is_int($value)) {
        // Handle error
    }
}

【讨论】:

  • 当然,我读到了这个——但是你怎么能处理它呢?你不能转换?我们是说值需要从一开始就是 int 还是什么都没有。
  • 如果您希望该值是一个 int,但 is_int 返回 false,您可以将其转换为 $value = (int) $value;。如果您不在乎它是否为 int,只需删除 is_int 检查即可。
  • 这很可怕,但无可否认,这似乎是唯一的出路。 PHP 没有得到它:/
  • 在 PHP 7 中,类型提示(现在称为类型声明)也允许指定标量类型,请参阅 php.net/manual/en/…
【解决方案2】:

要将值显式转换为整数,请使用 (int) 或 (integer) 强制转换。但是,在大多数情况下不需要强制转换,因为如果运算符、函数或控制结构需要整数参数,则会自动转换值。也可以使用 intval() 函数将值转换为整数。

http://php.net/manual/en/language.types.integer.php

【讨论】:

    【解决方案3】:

    确保 PersonID 属性定义为 int 而不是整数:

    private int $personId;
    

    而不是

    private integer $personId;
    

    【讨论】:

    • 你不是在 PHP 中,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多