【发布时间】:2011-06-24 06:27:21
【问题描述】:
在 PHP 程序中,我有一个包含一些自定义对象的数组,我想查找该数组是否包含某个对象。当然我可以使用array_search,但这会检查对象是否是同一个对象,而不是它是否具有相同的变量。所以我希望能够为对象创建自己的比较函数,我可以将它与 array_search 方法(或类似的方法)一起使用。 我希望能够做这样的事情:
class foo
{
public $_a,$_b;
function __construct($a,$b)
{
$this->_a = $a;
$this->_b = $b;
}
function __equals($object)
{
return $this->_a == $object->_a;
}
}
$f1 = new foo(5,4);
$f2 = new foo(4,6);
$f3 = new foo(4,5);
$array = array($f1,$f2);
$idx = array_search($f3,$array); // return 0
这样的事情可能吗? 我知道我也可以创建自己的 array_search 方法,该方法使用类中的方法,但我必须使用 2 个不同的搜索函数,一个用于具有自己比较功能的类,一个用于那些没有t.
【问题讨论】:
-
array_search 仅在您将其第三个 $strict 参数设置为 true 时检查对象是否为同一实例。否则,如果两个对象“具有相同的属性和值,并且是同一类的实例”,则它们被视为相等 - 请参阅 == 运算符的行为。
标签: php overloading equals-operator