2016-08-30 2 views
0

Как PHP сопоставляет пользовательские объекты?Как PHP сравнивать объекты

например.

Class Foo { 
    private $bar; 

    public function __construct($bar) 
    { 
     $this->bar = $bar; 
    } 
} 

$a = new Foo(12); 
$b = new Foo('abc'); 

var_dump($a < $b); 
var_dump($a == $b); 
var_dump($a > $b); 

Есть ли функция, чтобы переопределить в Foo, чтобы изменить какой тренинг по <, == и>?

+3

См. Http://php.net/manual/en/language.oop5.object-comparison.php – Dharmendra

ответ

1

В отношении comparing objects in PHP SPL единственное сравнение, которое имеет смысл, - это равенство объекта (== или ===). Они ведут себя так, как вы ожидали от них; == будет истинным, если два объекта одного класса и атрибуты которых имеют одинаковые значения. === будет истинным только в том случае, если два сравниваемых объекта являются одним и тем же экземпляром. не

Там будет нет встроенного Comparable интерфейса для использования или магического __compare метода, который бы переопределить поведение по умолчанию для других операторов сравнения. Вы можете, однако, сделать свой собственный интерфейс, если вы хотите:

// From @vascowhite: http://stackoverflow.com/a/17008682/697370 
interface Comparable 
{ 
/** 
* @param Comparable $other 
* @param String $comparison any of ==, <, >, =<, >=, etc 
* @return Bool true | false depending on result of comparison 
*/ 
    public function compareTo(Comparable $other, $comparison); 
} 

Существует PHP RFC, что в настоящее время «обсуждается» в отношении PHP7 (это было последнее обновление 2015-02-19), который хочет тянуть в интерфейсе Comparable к SPL.

Смежные вопросы