PHP, объекты автоматически конвертируются в 1 в операторах сравнения - PullRequest
0 голосов
/ 19 октября 2018

Согласно документации, это сравнение должно возвращать false, потому что «объект всегда больше»!Но вместо этого объект автоматически преобразуется в 1!Тем не менее, он говорит, что «объект не может быть преобразован в int»!Так почему же это происходит?

http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.types

// php code
$obj=new stdClass();
var_dump($obj==1);

// output
NOTICE Object of class stdClass could not be converted to int on line number 3
bool(true)

Вы можете проверить это на http://phptester.net/

1 Ответ

0 голосов
/ 19 октября 2018

Я думаю, что документация либо неверна, либо плохо сформулирована.

Смотрите этот сайт, где он погрузился в исходный код ...

https://gynvael.coldwind.pl/?id=492

Оператор в основном работает в два этапа:

  1. Если оба операнда относятся к типу, которому функция сравнения знает, как их сравнивать.Это поведение включает следующие пары типов (обратите внимание, что оператор равенства симметричен, поэтому сравнение A с B такое же, как с B против A):
• LONG vs LONG
• LONG vs DOUBLE (+ symmetrical)
• DOUBLE vs DOUBLE
• ARRAY vs ARRAY
• NULL vs NULL
• NULL vs BOOL (+ symmetrical)
• NULL vs OBJECT (+ symmetrical)
• BOOL vs BOOL
• STRING vs STRING
• and OBJECT vs OBJECT
Если пара типов отсутствует в приведенном выше списке, функция compare_function пытается привести операнды к типу второго операнда (в случае OBJECT с обработчиком cast_object), приведенному к BOOL (если второй типлибо NULL или BOOL), либо приведение к LONG или DOUBLE в большинстве других случаев.После приведения функция сравнения повторяется.

См. Мой PHP оператор равенства == справочная таблица для подробностей каждого конкретного случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...