Почему эти два объекта равны (==)? - PullRequest
7 голосов
/ 21 мая 2011

В 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] => 
)

EDIT:

Итак, причина в том, что ("x" == 0) = TRUE. Кто-нибудь может сказать мне, почему?

1 Ответ

4 голосов
/ 21 мая 2011

х представляет строку или х представляет ноль? Если он представляет собой ноль, то это моя теория: на странице Операторы сравнения есть транскрипция алгоритма сравнения массивов в Примере №1. Исходя из этого, я бы предположил, что в вашем случае то, что в конечном итоге произойдет, это сравнение между 0 и нулем. Согласно приведенной выше таблице, когда ноль сравнивается с чем-либо, он преобразуется в логическое значение. Таким образом, в итоге вы сравниваете 0 (ложь) с нулем (ложь), в результате чего два массива считаются равными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...