在 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/