__toString и числовые переменные

Ramazan

пыщ-пыщ
Регистрация
28 Янв 2007
Сообщения
470
Реакции
101
имеется класс :
PHP:
class foo
{
	private $string;
	
	public function __construct($var)
	{
		$this->string = $var;
	}
	
	public function __toString()
	{
		return is_string($this->string) ? $this->string : sprintf('%d', $this->string);
	}
}

Возникает проблема, если мы переменную не выводим, а скажем создаём условие

PHP:
$test = new foo(11);
echo ($test == 11 ? 'ok' : 'bla');

Сталкивался кто нибудь с такой дрянью, и есть ли решение?
 
имеется класс :
PHP:
class foo
{
	private $string;
	public function __construct($var)
	{
		$this->string = $var;
	}
	public function __toString()
	{
		return is_string($this->string) ? $this->string : sprintf('%d', $this->string);
	}
}
Возникает проблема, если мы переменную не выводим, а скажем создаём условие
PHP:
$test = new foo(11);
echo ($test == 11 ? 'ok' : 'bla');
Сталкивался кто нибудь с такой дрянью, и есть ли решение?
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Ничего нового я для себя по ссылкам не открыл. Суть проблеммы, в том, что даже если мы сделаем:
PHP:
$test = new foo(11);
echo $test; // ошибок нет
если так:
PHP:
$test = new foo('string');
echo ($test == 'string' ? 'ok' : 'bla'); // Ошибок нет
а вот так
PHP:
$test = new foo(11);
echo ($test == 11 ? 'ok' : 'bla'); // Выдаёт ошибку

Пока вроде эту ошибку обхожу стороной, но уверен по мере написания кода она у меня обязателтьно появится.
 
Если тебе в сравнении не надо сравнивать по типу, то делай так
PHP:
echo ($test == '11' ? 'ok' : 'bla');
 
А с како целью это делается?

Вот так будет работать:
PHP:
echo ((string)$test == 11 ? 'ok' : 'bla');
echo ((string)$test == '11' ? 'ok' : 'bla');
 
Назад
Сверху