为什么这两个对象是相等的(==)?

car*_*usm 7 php comparison object

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

($o1 == $o2) == TRUE.
Run Code Online (Sandbox Code Playgroud)

为什么?

转储$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] => 
)
Run Code Online (Sandbox Code Playgroud)

转储$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] => 
)
Run Code Online (Sandbox Code Playgroud)

编辑:

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

ian*_*nlh 4

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