雖然測試我自己的模塊進行驗證我發現了一些問題。 我真的不知道發生了什麼,我無法解釋它。PHP比較對象 - 奇怪的行爲
也許我很累或PHP只是嚇壞了。 可以有人告訴我什麼是錯的?
我想比較對象(因爲我要檢查的對象已存在於陣列)
在PHP手冊中,我們可以讀到:
對象比較
在PHP 5中,對象比較比PHP 4更復雜,更符合 從面嚮對象語言 (不是PHP 5就是這樣一種語言)期望得到的結果。
當使用比較運算符(==),對象變量以簡單的方式,即進行比較 :兩個對象實例是,如果他們 具有相同的屬性和值相等,並且是相同的實例 類。
因此,讓創建簡單的代碼將使用它
class A
{
protected $property;
public function __construct($value)
{
$this->property = $value;
}
}
$object1 = new A('ABC');
$object2 = new A('XYZ');
// Instances are not equal because of different value of property
var_dump($object1 == $object2); // Will return bool(false)
好吧,PHP告訴我們的對象不相等 - 這就是正確的。
所以現在我決定使用我班的對象。 我提供了不同的參數,以構造(這些參數將被設置爲類性質在)
echo "Start";
// Creating an instance of class with some parameters
// Each of parameter will be stored as class property
$object1 = new ComparsionRule('ABadasdC', ComparsionRule::LESS_THAN_OR_EQUAL);
// Creating an instance of class with some different parameters
// Each of parameter will be stored as class property
$object2 = new ComparsionRule('XYZ', ComparsionRule::NOT_EQUAL_TO);
// Two instances should not be equal (false expected)
var_dump($object1 == $object2); // Will return bool(true)
// Printing content of first object
var_dump($object1);
// Printing content of second object
var_dump($object2);
// Checking the expression again
// Two instances should not be equal (false expected)
var_dump($object1 == $object2); // Will return bool(false)
echo "End";
die;
結果是令人驚訝的,對於第一個PHP告訴我們的對象相等,然後將其打印的那些對象,後那就是再次比較對象但是現在對象不等於。
你可以找到的結果如下圖:
我沒有使用任何魔術方法(節選構建),我不能顯示ComparsionRule內容(被許可禁止)
另一個有趣的事實:
當我刪除$ _errorDefinitions屬性它開始正常工作。類似的,當我改變的屬性命令($ _type和超過$ _errorDefinitions前面定義$ _compareValue)
我不希望得到替代的解決方案我只想知道爲什麼它的工作也是這樣嗎?
有人可以解釋我嗎?
嗯,是啊,與詮釋你的榜樣(0)和字符串清除我的腦海裏。 我沒有注意到PHP是比較屬性值與「==」運算符,我知道PHP的行爲奇怪,它:) 我會檢查它,我會很快發佈答案。 –
我只是用簡單的代碼添加了新的答案,它顯示了行爲。 –