2012-02-19 3 views
3

Я использую PHP Version 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 не может выполнять косвенное кастинг. Вам нужно либо '20' быть строкой, либо' $ inst' стать строкой явно так: '((string) $ inst == 20)' или '$ inst == (string) 20' –

+0

Прости, да! Вам нужно явно указать строку как в методе __toString(), так и в сравнении. Пример кода отредактирован соответствующим образом –

1

Это называется перегрузкой оператора. Да, вы можете это сделать. Но вы должны использовать PECL пакет (отрывок из описания следующего:

Перегрузка операторов для:. +, -, *, /,%, < <, >>,, |, &, ^, ~ ,!, ++, -, + =, - =, * =,/=,% =, < < =, >> =,. =, | =, & =,^=, ~ =, ==,! =, ===,! ==, < и < = операторы.

)

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