【问题标题】:PHP typecastingPHP 类型转换
【发布时间】:2012-08-05 02:56:13
【问题描述】:

我想知道将值从一种类型转换为另一种类型的最佳方法是什么。

我们应该使用哪种变体:

  1. intval($value);
  2. settype($value, 'int')
  3. (int)$value

它们都产生相同的结果。

【问题讨论】:

    标签: php types casting


    【解决方案1】:
    (int)$value
    

    intval($value)settype($value, 'int') 相比,保存一个函数调用。

    而且(int)$value足够干净,所以我更喜欢这种方式。

    当您需要使用intval($value) 时,您需要使用指定的基数进行转换(默认为基数10)。 intval 接受第二个参数作为转换的基数。

    【讨论】:

    • 在什么情况下他们有不同的行为?
    • 请注意settype 函数会更改变量的类型。这样做可能会丢失部分数据。另一方面,诸如(int) $variable 之类的类型转换会导致变量的值被视为给定类型并且根本不影响变量,您的变量仍然保持其原始类型。
    • 您的 INT 将在您输入 > 19 个字符后发生变化......而且非常重要。我不知道这些功能,但 (int) 绝对知道。
    【解决方案2】:

    我更喜欢使用

    settype($value,getType(intval((int)$value)));
    

    【讨论】:

    • 我很喜欢 WTF DOWNVOTE ...然后我明白了。不错:)
    • 我不明白。这与 settype($value,'integer') 有何不同?
    • LMFAO 太疯狂了
    • 将类型设置为 getType 返回的值,该值在 getType 内设置为整数 2 次...嗯,我敢打赌 $5 $value 是一个整数...
    【解决方案3】:

    这里的答案是使用对您来说“更清洁”的任何内容。速度上的任何差异都将是如此之小,以至于担心它几乎肯定会花费您更多的时间而不是您可能节省的时间。然而,节省时间的方法是拥有可以在未来阅读和理解的代码。

    Coding Horror 有一篇很好的文章解释了这件事。

    【讨论】:

      【解决方案4】:

      (int)$value 比其他方式快得多

      【讨论】:

      • “快得多” - 请不要。只是因为这样的答案,很多人认为这是真的
      • 这是真的。我已经测试了所有方法 1000 万次并得到以下结果: int()$value - 2.7695989608765 s; intval($value) - 5.8383219242096 秒; settype($value, 'int') - 8.035208940506 秒。 PHP中的调用函数很昂贵
      • 我同意它更快,但是当你的代码中有 1000 万次强制转换时——你会遇到比仅仅决定使用什么——函数或类型提示更糟糕的问题。所以对于现实生活来说,差异根本不重要(对于成千上万的人来说可以忽略不计)
      • 虽然我同意@zerkms,但事实是这个答案是准确有效的。但是,是的,1000 万个 vars lolwut
      【解决方案5】:

      这取决于您要转换的类型。 PHP 已经设计为动态转换类型。如果需要,它可以将字符串 '5' 转换为整数值 5 或浮点 5.0。这只是 PHP 的自然类型转换,但有一些方法可以强制执行类似的行为。

      在许多情况下,intval() 实际上比 (int) 类型转换更快,尤其是在字符串到整数的转换中。但就个人而言,由于我也编写 C++,所以我使用类型转换,因为它对我来说更自然和整洁。然而,结果在不同情况下略有不同。不过,我从没想过 settype() 很有前途。

      【讨论】:

      • 如果类型是动态的,唯一的办法就是settype。
      【解决方案6】:

      PHP 中的类型转换与在 C 中的工作方式非常相似:所需类型的名称写在要转换的变量之前的括号中。

      http://php.net/manual/en/language.types.type-juggling.php#language.types.typecasting

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-06
        • 2017-04-24
        相关资源
        最近更新 更多