Почему нет ошибки при сравнении строки с объектом, который не реализует __toString?

#php

Вопрос:

Я столкнулся с подобной проблемой.

 <?php

class Foo
{
    public $f = 3;

//  public function __toString()
//  {
//      return 'test';
//  }
}

$foo = new Foo();

// do not implement __toString() -> PHP Recoverable fatal error:  Object of class Foo could not be converted to string
//$str = strval($foo);
//$str = (string)$foo;
//echo $foo . PHP_EOL;

// error not occurred... why?
if ($foo == "test") {
    echo 'hi';
}

 

Что произошло в предложении if($foo == «тест»)?

Спасибо за вашу помощь.

Комментарии:

1. Это приводит к ошибке при использовании echo $foo , потому что echo ожидает строку, PHP попытается преобразовать $foo ее в строку и выдаст ошибку, так как он не может этого сделать. В случае условия if PHP не будет пытаться что-либо преобразовать, он просто сравнивает значение $foo , которое является объектом, и строку «тест», чтобы убедиться, что оно равно.

2. Значит… это положение всегда ложно? (Без реализации __toString, например (объект) == (строка) ?)

3. Так и должно быть, да.