【问题标题】:PHP Casting ErrorPHP 转换错误
【发布时间】:2014-01-28 14:27:14
【问题描述】:
<?php
isInt("4");
isInt("Test");
function isInt($id){
    echo $id." ".(int)$id;
    if($id == (int)$id)echo "True.<br />";
    else echo "False.<br />";   
}

?>

输出结果为:

4 4 True.
Test 0 True.

您会注意到第二个结果为真,根据输出,它应该回显假。

我意识到 php is_int() 中有一个内置函数。

我还意识到,如果我在 if 语句中输入第三个等号:if($id === (int)$id),那么第二个等号将返回 false,但第一个等号也会返回 false。

有人可以向我解释为什么 PHP 会这样做,也许可以解决这个问题? (我正在运行 PHP 5.4.22)

基本上我想要完成的是isInt("4") 回显真,isInt(4) 回显真,isInt("Text") 回显假;

【问题讨论】:

  • 这就是 PHP “工作”的方式。 == 类型会处理它的操作数,即使是显式转换。
  • 使用 is_numeric() 代替然后不需要自定义函数
  • 你认为这很糟糕?试试$a = '0xFF'; $b = '255.0'; var_dump($a == $b) ...
  • 为什么不使用 is_int() 函数? php.net/is_int
  • PHP 有时真的很烦人。谢谢戴夫,这可以满足我的需要。马里奥,我认为is_int() 不适用于我的情况,而is_numeric() 更灵活

标签: php casting


【解决方案1】:

如果你使用三等号,它会检查类型和结果。

对于第一个,“4”是一个字符串,而不是一个 int(文字 4 是一个 int,但由于您使用引号,它是一个字符串)。

对于第二个,“Test”也是一个字符串。

【讨论】:

    【解决方案2】:

    第二个版本:

    $id = 'Test';
    'Test' == (int)'Test';
    'Test' == 0
    0 == 0
    TRUE
    

    在字符串开头不包含数字的字符串在用于整数上下文时将始终自动转换为整数 0。

    如果你改用123Test

    $id = '123Test';
    'Test' == int('Test');
    'Test' == 123
    0 == 123
    FALSE
    

    【讨论】:

      【解决方案3】:

      要获得所需的值,请检查此..

      if($id === (int)$id)echo "True.<br />";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2011-05-29
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多