PHP中'eq'和'=='的区别是什么?

4

首先,我尝试在Stack Overflow和Google上搜索不同变体的标题,但没有找到解决方案。

我对PHP还比较陌生,甚至不知道使用eq==进行字符串比较有什么区别!

通常我会在PHP中使用==来比较字符串,我对此很熟悉。

但我看到过使用eq来比较字符串的代码。我模糊地记得有人发现“哦!我使用了==来比较字符串。我应该使用eq”。

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

==够用了吗?还是应该使用eq


抱歉我的问题不够深入,请原谅我的错误!这可能是Perl。我看到代码嵌入HTML中感到困惑,还以为这是一种不同的嵌入PHP的方式。抱歉。


咳咳,你确定你在用正确的编程语言写代码吗?我只知道 eq 是 Perl 中的语法,而且我从来没有在 PHP 中见过它(包括php.net 的文档)。 - Boldewyn
eq 在这里甚至都没有列出来:http://de3.php.net/manual/en/language.operators.precedence.php - Boldewyn
有足够声望的人可以删除这个问题。我无法做到。希望这个问题不会引起更多的困惑。 - anon355079
@senthil:这在标准的Perl文档中有说明:在命令行上键入perldoc perl以获取目录列表,您将看到perldoc perlop涵盖了运算符。 - Ether
@senthil,PHP和Perl在外观上很相似 - 尤其是对于初学者。请不要删除或请求删除此问题,它可能对其他人有很大帮助。 - daotoad
显示剩余3条评论
5个回答

11

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

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

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

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


6
为了配合我的评论:在Perl中,eq运算符测试字符串的相等性,而==只测试数字的相等性。
尽管PHP最初是一组Perl脚本,但我不认为它们复制了这个操作符,这个页面似乎也同意这一点。

在Bash中,与Perl相比,这两个运算符的含义是相反的,即"eq"用于数字。 - Peter Mortensen
换句话说,你的答案也可以包括这一点。 - Peter Mortensen

2

PHP没有eq这个运算符。你可能在想Perl,它的eq会将两个变量作为字符串进行比较。

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

//this is true
'45' == 45

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

有些情况下,当涉及到类型时,== 会猜错,因此如果您知道两个表达式的类型相同,则最好使用 ===


1

== 运算符检查两个变量、字面量或这两个编程实体的组合之间是否存在完全匹配,但它不是类型安全的!

如果您使用它来比较字符串,则正在将一个字符串与正则表达式进行比较以找到完全匹配!

但是,在 PHP 中有很多更强大的比较字符串的方法。您只需要知道自己想要实现什么....例如:similar_text()strcasecmp()strcmp()等。或者,您可以通过调用其中一个函数 ereg()eregi() 并使用自己的模式来比较字符串!


你确定吗?如果你用它来比较字符串,那么你是在将一个带有正则表达式的字符串与另一个字符串进行比较,以找到完全匹配!这意味着运算符在所有情况下都不是可交换的,听起来高度不可能。你能提供一个来源和/或一个例子来支持你的说法吗?请通过编辑(更改)你的答案来回复,而不是在评论中回复(不要添加“编辑:”,“更新:”或类似的内容 - 答案应该看起来像今天写的)。 - Peter Mortensen

0

eq在PHP中对我来说是个新消息,但有严格比较运算符可用。

$a === $b

请查看手册以获取详细信息。


我认为他的意思是“二进制”,即它需要两个参数或具有两个结果(与Perl cmp运算符相比),但在这种情况下,“二进制”一词存在一些不幸的歧义(例如按位与逻辑比较)。 - cletus
我的错误,我想说的是“严格模式”。已修正。 - Pekka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接