PHP:不相等和不相等运算符是如何工作的?它们比相等或相等运算符快吗?

PHP:不相等和不相等运算符是如何工作的?它们比相等或相等运算符快吗?,php,string,performance,comparison-operators,Php,String,Performance,Comparison Operators,我问的是比较, 假设我有两个小文本: abc:“这是一篇很长的文章” xyz:“这是一个很长的文本” PHP是比较每个字符还是将它们作为带掩码的二进制字符进行比较 例如abc!==xyz,如果PHP按字符进行比较,那么not equal会更快,因为它在第一个字符之后中断 我已经读过一些问题,比如: 所以我知道由于施法的原因,===比=快 但是与相比,==或==有什么区别呢==或=?字符串定义为结构: 定义了相等运算符。(以下三个相等运算符的执行方式基本相同,只是它们跳过了地址检查,因为地址

我问的是比较, 假设我有两个小文本:

  • abc:“这是一篇很长的文章”
  • xyz:“这是一个很长的文本”
PHP是比较每个字符还是将它们作为带掩码的二进制字符进行比较

例如
abc!==xyz
,如果PHP按字符进行比较,那么not equal会更快,因为它在第一个字符之后中断

我已经读过一些问题,比如:

所以我知道由于施法的原因,
===
=


但是与
相比,
==
==
有什么区别呢==
=

字符串定义为结构:

定义了相等运算符。(以下三个相等运算符的执行方式基本相同,只是它们跳过了地址检查,因为地址检查总是错误的)

static zend_always_inline zend_bool zend_string_等于(zend_string*s1,zend_string*s2)
{
返回s1==s2 | |(ZSTR|LEN(s1)==ZSTR|LEN(s2)和&!memcmp(ZSTR|VAL(s1)、ZSTR|VAL(s2)、ZSTR|LEN(s1));
}
如果你不会说C:

首先,比较每个字符串结构的地址,如果它们相等,则字符串必须相等。否则,将进行进一步检查

其次,如果地址不相等,则比较每个字符串的长度。这只是一个整数相等检查,因为长度是字符串结构定义的一部分。如果长度不相等,则返回false

接下来,使用检查每个字符串的内存内容。由于memcmp在内存内容相等时返回0,因此该值被取反以返回true

为了明确回答您的问题:PHP避免检查字符串的每个字符,检查每个字符的唯一情况是,如果字符串的每个字符(最后一个字符除外)都相等,并且字符串的长度相同


我必须说:如果你真的担心
==
慢==,那么您。

将它们与掩码进行二进制比较是什么意思?和
=/
==
在这方面与
==
/
===
一样,正如您链接到的答案中所提到的。也许我错了,但由于“掩码”,您可以在这里了解它:这对我很有帮助,但并不能真正解决我的问题,因为我仍然不知道zend_string_equals函数将用于哪个运算符。因此,我认为它将用于“===”和“!===”只是一个否定函数,而不是自己的函数,对吗?@Regda它将用于比较字符串(假设字符串不是数字,它将与
=
==
一起使用)——为了比较不同的类型,您应该检查比较规则。
typedef struct {
    char *c;
    size_t len;
    size_t a;
} smart_string;