#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. Так и должно быть, да.