php - PHP 中是否有像 Java 中的 __equals 方法?

标签 php oop equals

在 PHP 中是否可以使用模式或魔术方法来定义何时比较一个类的两个实例?

例如,在 Java 中,我可以轻松地覆盖 equals 方法并创建一种检查和比较两个实例的自定义方法。

最佳答案

一句话?不,没有 __equals 魔术方法。有魔法方法的完整列表in the manual .

你可以的

$myObject1 == $myObject2

如果它们具有相同的属性和值,并且是同一类的实例,则认为它们相等。

我自己也经常希望使用这种类型的方法,但我认为更有用的方法是 __compare() 方法,该方法将被任何比较运算符 <、>、== 调用, === 等它已经存在于 PHP 的内置类中,如 PHP internals wiki 所示。并且有一个如何在 PHPInternals book 中实现的示例:-

compare_objects

int (*compare)(zval *object1, zval *object2 TSRMLS_DC)

Compares two objects. Used for the operators ==, !=, <, >, ⇐ and >=. The implementations should follow these rules – for any objects a, b and c that share the same compare handler:

我用来实现此目的的一种方法是实现一个 Comparable 接口(interface),例如:-

interface Comparable
{
    /**
     * @param Comparable $other
     * 
     * @return Int -1, 0 or 1 Depending on result of comparison
     */
    public function compareTo(Comparable $other);
}

对象比较的详细信息,以及其他所有与 OOP 相关的内容都可以在这里找到 http://www.php.net/manual/en/language.oop5.php .

<罢工> This may be implemented in PHP 7 .

现在有一个实现,您可以使用 composer 安装它。 https://github.com/Fleshgrinder/php-comparable

关于php - PHP 中是否有像 Java 中的 __equals 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008622/

相关文章:

php - 在 cakephp Controller 中更改默认数据库

java - 面向对象的安全编程

python - 为什么 wx.SingleChoiceDialog 没有正确地子类化

c# - 可扩展统计系统的最佳方法

java - 忽略 equals/hashCode 中的某些字段时的潜在陷阱?

php - 在 mysql 准备语句中的非对象错误上调用成员函数

php - 无法使用 MySQL Workbench 访问 WordPress 数据库

javascript - GET 参数未传递

java - equals 和 hashCode : Is Objects. 哈希方法坏了?

java - 数组等于忽略顺序