2016-08-30 7 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); 

<、のcomportement ==とを変更するためにはFooに上書きする機能>はありますか?

+3

参照先:http://php.net/manual/en/language.oop5.object-comparison.php – Dharmendra

答えて

1

に関しては、comparing objects in PHP SPLに関しては、オブジェクトの等価性(==または===)が唯一の比較になります。これらはあなたが期待するように振る舞います。 ==は、2つのオブジェクトが同じクラスで属性が同じ値である場合はtrueになります。 ===は、比較対象の2つのオブジェクトが同じインスタンスである場合にのみtrueになります。

何あなたが使用するビルトイン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); 
} 

は(2015年2月19日を最後に更新された)引きしたいPHP7に関しては「議論の下にある」現在PHP RFCがあります:あなたは、しかし、あなたが希望する場合は、独自のインターフェースを作ることができますComparableのSPLへのインタフェースである。

関連する問題