【问题标题】:What's the difference between 'eq' vs '==' in PHP? [closed]PHP中的'eq'与'=='有什么区别? [关闭]
【发布时间】:2010-12-23 22:29:50
【问题描述】:

首先,我尝试在 StackOverflow 和 Google 上搜索我为这个问题设置的标题的不同变体。我找不到解决方案。

我对 PHP 还很陌生。新到不知道使用eq== 进行字符串比较之间的区别!

我通常使用== 来比较 PHP 中的字符串。我觉得很舒服。

但我见过使用eq 比较字符串的代码。而且我隐约记得有人做了这样的观察,比如‘哦!我使用== 来比较字符串。我应该使用eq'。

我只想知道使用== 是否可以进行简单的字符串比较?我不是在谈论特殊情况、区分大小写、子字符串或任何花哨类型的字符串比较。只需检查apple 是否与apple 相同。

== 够吗?或者我应该使用eq


我的错误 :( 非常感谢您解决了我的“未充分研究”的问题!一定是 Perl。看到嵌入 HTML 中的代码我很困惑,并认为这是嵌入 PHP 的另一种方式。抱歉。

【问题讨论】:

  • 咳咳,您确定您使用正确的语言进行编码吗?我只从 Perl 知道eq,以前从未在 PHP 中看到它(包括 php.net 文档)。
  • 代表足够高的人可以删除此问题。我做不到。我希望这个问题不会引起更多混乱。
  • @senthil:这是在标准 perl 文档中:在命令行中键入 perldoc perl 以获取目录列表,您将在其中看到 perldoc perlop 涵盖了运算符。
  • @senthil,PHP 和 Perl 看起来很相似——尤其是对于初学者。请勿删除或请求删除此问题,这可能对其他人有很大帮助。

标签: php string operators equality


【解决方案1】:

PHP 中没有eq 运算符。但是有=====

=== 是严格的比较运算符,不会进行类型转换。

== 将进行类型转换(例如,'' == 0 的计算结果为 true)。

完整列表请参见Comparison Operators,PHP 类型转换规则请参见Type Juggling。我能找到的对eq 的唯一引用是作为version_compare() 的参数。

【讨论】:

    【解决方案2】:

    eq 在 PHP 中对我来说是个新闻,但有严格的比较运算符

    $a === $b
    

    查看the manual了解详情。

    【讨论】:

    • 我认为他的意思是“二进制”,因为它需要太多参数或有两个结果(与 Perl cmp 运算符相比),但“二进制”这个词有一些不幸的歧义上下文(例如按位与逻辑比较)。
    • 我的错误,我的意思是“严格”。已修订。
    【解决方案3】:

    伴随我的 cmets:Perl 中的 eq 运算符测试 string 相等性,而 == 测试 numerical 相等性仅限。

    尽管 PHP 最初是作为 Perl 脚本的集合开始的,但我不认为,他们复制了这个运算符,this page 似乎也同意。

    【讨论】:

    • 而在 Bash 中,这两个运算符的含义与 Perl 相比是相反的,即“eq”用于数字(?)。
    • 或者换句话说,您也可以在回答中涵盖这一点。
    【解决方案4】:

    PHP 没有 eq operator。您可能会想到 Perl,其中 eq 会将两个变量作为字符串进行比较。

    PHP 有一个相等运算符 (==) 和一个真正的相等运算符 (===)。真正的相等运算符 (===) 将测试运算符两边的表达式是否相等且类型相同。相等运算符 (==) 将尝试将每个表达式强制转换为相同的类型,然后进行比较。

    //this is true
    '45' == 45
    
    //this is false
    '45' === 45
    

    在某些情况下== 会在涉及类型时做出错误的猜测,因此如果您知道您有两个相同类型的表达式,最好使用===

    【讨论】:

      【解决方案5】:

      == 运算符检查两个变量、文字或这两个程序实体的组合之间是否完美匹配……但它不是类型安全的!

      如果你用它来比较字符串,你就是在比较一个字符串和一个正则表达式来找到一个完美的匹配!

      但是在 PHP 中有很多最强大的比较字符串的方法。您只需要知道您要完成的工作....例如:similar_text()strcasecmp()strcmp() 等。或者您可以通过调用 ereg() 函数之一使用正则表达式来比较字符串, eregi() 用你自己的模式!

      【讨论】:

      • Re“如果你用它来比较字符串,你就是在比较一个字符串和一个正则表达式来找到一个完美的匹配!”:你确定吗?这意味着操作员不会是commutative(在所有情况下)。这听起来不太可能。可以在这里为您提供来源和/或示例来支持您的陈述吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2011-06-07
      • 2014-06-11
      • 2011-11-30
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多