让==运算符在对象比较期间忽略选定的类成员

Che*_*eng 2 php

PHP为对象比较提供了一种非常好的方法.

class People {
    public $name;
}

$p0 = new People();
$p1 = new People();

$p0->name = 'ali';
$p1->name = 'ali';

// equal
if ($p0 == $p1) {
    echo 'equal' . "\n";
} else {
    echo 'diff' . "\n";
}
Run Code Online (Sandbox Code Playgroud)

但是,有时候,我想在比较期间忽略一些班级成员.

class People {
    public $id;
    public $name;
}

$p0 = new People();
$p1 = new People();

$p0->id = 0;    // Can we ignore this id during == comparison?
$p1->id = 1;    // Can we ignore this id during == comparison?
$p0->name = 'ali';
$p1->name = 'ali';

// diff. As $p0->id != $p1->id. How can we ignore id during == comparison?
if ($p0 == $p1) {
    echo 'equal' . "\n";
} else {
    echo 'diff' . "\n";
}
Run Code Online (Sandbox Code Playgroud)

如果我有任何方法要求==操作员忽略选定的班级成员?

Gor*_*don 5

你不能在PHP中重载运算符.有一个PECL扩展允许它,但是为对象提供一个equals()方法然后通过它进行比较更容易(也更便于移植),例如

class People
…
    public function equals(People $people)
    {
        return $this->name === $people->name;
    }
}
Run Code Online (Sandbox Code Playgroud)