2012-02-19 8 views
3

私はPHPバージョン5.2.5を使用しています。 自分のクラスをintと比較できるようにしたい。クラスとintを比較する

abstract class A { 

private $value; 

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

public function __toString() 
{ 
     return $this->value; 
} 

} 

class B extends A { } 

が、私はこのように私のクラスを使用することができるようにしたい:私はそれを行うことができますどのよう

$inst = new B(20); 
if($inst==20) { 
    //... 
} 

+0

[PHPでの比較演算子のオーバーロード]の複製があります(http://stackoverflow.com/questions/3111668/comparison-operator-overloading-in-php) –

答えて

3

クラス内でmagic __toString()メソッドを使用できます。

class A 
{ 
    private $value; 

    public function __construct($value) 
    { 
     $this->value = $value; 
    } 
    public function __toString() 
    { 
     return (string) $this->value; 
    } 

} 

$inst = new A(20); 
if((string) $inst==20) { 
    //... 
} 

技術的には、__toString()は、整数ではなく文字列を返さなければなりませんが、PHPの緩いタイピングは、それは演算子のオーバーロードと呼ばれています

+0

PHP 5.2.12では動作しません。 intを返すと、メソッドA :: __ toString()は文字列値を返す必要があります。戻り値を文字列として強制的にキャストすると、比較は機能しません(理由はわかりません)。また、5.2より前のバージョンではこれが明らかにうまくいきません。それはうまくいきません。 –

+1

これはうまくいきません。 PHPは間接的なキャストを実行できません。 '((文字列)$ inst == 20)'または '$ inst ==(文字列)20' –

+0

申し訳ありませんが、あなたは文字列にするには' 20'か、 '$ inst'は明示的にそのような文字列になります。 __toString()メソッドと比較の両方で文字列に明示的にキャストする必要があります。適切に編集されたコード例 –

1

標準緩いタイピングの比較ルールを使用して比較を行います。 はい、できます。 。、&、^、〜| < <、>>、、、、*、/、% - +、:

オペレータのオーバーロード:しかし、あなたは以下の説明からPECLパッケージ (抜粋を使用する必要があります、!、++、 - 、 + =、* =、/ =、%=、< < =、>> =、=、| =、& =、^ =、〜=、 ==、!=、===、!==、<、および< =演算子。