我需要检查两个PHP对象是否相等,包括相等的值。当然,我可以轻松地在类中添加一个isEqualTo(...)
方法来比较所有相关的值。然而,具体的类将在不久的将来发生变化,我想知道是否有任何自动化的方式来做到这一点。
示例:
class Contact {
private name; // String
private phone; // Int
private someObject; // Custom Object
public function getName() {
return $this->name;
}
public function setName($newName) {
$this->name = $newName;
}
public function getPhone() {
return $this->phone;
}
public function setPhone($newPhone) {
$this->phone = $newPhone;
}
public function getSomeObject() {
return $this->someObject;
}
public function setSomeObject($newObj) {
$this->someObject = $newObj;
}
// Manual Solution
public function isEqualTo($contact) {
result = $this->name == $contact->getName();
result &= $this->phone == $contact->getPhone();
result &= $this->someObject == $contact->getSomeObject();
return result;
}
}
这显然会起作用。当然,我知道比较
someObject
的限制(需要完全相同的对象才能为真),但这没关系。然而,类
Contact
将在不久的将来进行扩展。每次我向类中添加新属性/值时,都必须将它们添加到isEqualTo
中。这没什么大不了的,但有点繁琐。那么,有没有办法实现
isEqualTo
以自动检查所有可用的公共属性?我找到了
get_class_vars
和get_object_vars
,但这些方法只适用于可以直接访问的变量,而不能使用getter和setter。我发现
get_class_methods
,但这返回所有方法,而不仅仅是getter和setter。当然,通过get...
和set...
过滤方法名称会起作用,但这更像是一种hack而不是“漂亮而干净”的解决方案。简而言之:有没有任何“正确”的方法自动检查两个PHP对象是否相等?