PHP物件的比較

餘二五發表於2017-11-23
物件比較:

相等:當使用比較運算子(==)比較兩個物件變數時,比較的原則是:
    1.如果兩個物件的屬性和屬性值 都相等,
    2.而且兩個物件是同一個類的例項(instance of),那麼這兩個物件變數相等。
   
全等:而如果使用全等運算子(===),這兩個物件變數一定要指向某個類的同一個例項(即同一個物件,說明物件標誌符都完全一樣)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Sheep
{
    public $name;
    protected $food;
 
    public function __construct(string $name, string $food)
    {
        $this->name = $name;
        $this->food = $food;
    }
 
    public function __toString()
    {
        return serialize($this);
    }
 
    public function __clone()
    {
        echo `物件被克隆` . PHP_EOL;
    }
}
 
$sheep1 new Sheep(`喜洋洋``肉`);//PHP Recoverable fatal error:  Object of class Sheep could not be converted to string
 
echo $sheep1;
 
 
/**
 *
 *
 * 相等:當使用比較運算子(==)比較兩個物件變數時,比較的原則是:如果兩個物件的屬性和屬性值 都相等,
 *      而且兩個物件是同一個類的例項,那麼這兩個物件變數相等。
 *
 *  全等:而如果使用全等運算子(===),這兩個物件變數一定要指向某個類的同一個例項(即同一個物件)。
 *
 */
 
 
$sheep1 new Sheep(`喜洋洋``肉`);
$sheep2 new Sheep(`喜洋洋``肉`);
$sheep3 clone $sheep1;
 
//分析:三個物件都是Sheep類的例項,且物件的屬性和值都完全一樣
 
 
if ($sheep1 == $sheep2 && $sheep2 == $sheep3) {
    echo `$sheep1 == $sheep2 == $sheep3` . PHP_EOL;
}
 
$sheep4 $sheep1//物件的引用傳遞(傳遞的是物件識別符號)
 
if ($sheep4 === $sheep1) {
    echo `$sheep4 === $sheep1` . PHP_EOL;
}
本文轉自 hgditren 51CTO部落格,原文連結:http://blog.51cto.com/phpme/2051559,如需轉載請自行聯絡原作者


相關文章