php - 为什么这两个对象相等(==)?

标签 php object comparison

在 PHP 中我有两个对象,它们是不同的因为 $_frets 变量(x 是一个字符串“x”),但是 PHP 说

($o1 == $o2) == TRUE.

为什么?

$o1 的转储:

guitarChord Object
(
    [_guitarChord:guitarChord:private] => 
    [_chord:guitarChord:private] => chord Object()
    [_baseFret:guitarChord:private] => 0
    [_frets:guitarChord:private] => Array
        (
            [0] => x
            [1] => 0
            [2] => 2
            [3] => 2
            [4] => 2
            [5] => x
        )

    [_tuning:guitarChord:private] => tuning Object()
    [currVariation] => 0
    [nextVariation] => 
    [prevVariation] => 
)

$o2 的转储:

guitarChord Object
(
    [_guitarChord:guitarChord:private] => 
    [_chord:guitarChord:private] => chord Object()
    [_baseFret:guitarChord:private] => 0
    [_frets:guitarChord:private] => Array
        (
            [0] => x
            [1] => 0
            [2] => 2
            [3] => 2
            [4] => 2
            [5] => 0
        )

    [_tuning:guitarChord:private] => tuning Object()
    [currVariation] => 0
    [nextVariation] => 
    [prevVariation] => 
)

编辑:

所以原因是因为 ("x"== 0) = TRUE。谁能告诉我为什么?

最佳答案

x代表字符串还是代表null?如果它表示 null,那么这就是我的理论:Comparison Operators页面有示例 #1 中数组比较算法的转录。基于此,我想在您的情况下,最终会发生的是 0 和 null 之间的比较。根据上表,当 null 与任何东西进行比较时,它被转换为 bool。因此,您最终将 0 (false) 与 null (false) 进行比较,导致两个数组被视为相等。

关于php - 为什么这两个对象相等(==)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078436/

相关文章:

php - 如何取代小组赛,同时保持其他一切不变?

javascript - 从多个文件加载多个 JSON 对象

objective-c - iOS:将图像的一部分与选项库进行比较

c++ - Fmod 函数显然输出预期的 double 值,但 if(fmod == expected double) 的计算结果不为真

php - 如果 Laravel 的内置身份验证中的身份验证逻辑重定向?

php - 使用php将android连接到mysql

php - CS50 Pset7 产品组合

c# - 从 C# 中的通用对象获取属性

ios - 如何从 Xib 文件加载自定义 UITableViewCells?

php - 我应该选择什么 PHP 博客软件