Keanor
@Keanor
Ведущий разработчик

Бесполезный вопрос про print(), почему получается то что получается?

узнал что print() возвращает 1, решил поигать.

Если выполнить
$a = 1 + print("3"); echo ++$a;

то на экран будет выведено 33, все верно: первую тройку вывел print и вернул 1, а = 1 + 1 и через инкремент вывелась вторая тройка.

Но если поменять местами 1 и print то все будет несколько иначе:
$a = print("3") + 1; echo ++$a;
выведет 42!

Перемена мест слагаемых влияет на приведение типов, но что тут происходит все равно не понятно.

Каким-то образом +1 переместился внутрь print() что нахожу забавным, есть ли тут гуру которые понимают как это работает?
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
@kapai69
print не является "настоящей" функцией (это конструкция языка), поэтому заключать аргументы в скобки необязательно.

Цитата из мануала.
То есть он будет выводить все до точки с запятой, а не то что у него находится в скобках. Поэтому второе выражение будет выглядеть как
$a = print "3" + 1; echo ++$a;
Отсюда и результат.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
OnYourLips
@OnYourLips
В первом случае все очевидно: 33.
Во втором случае будет так: print(("3") + 1). Поэтому выведется 4. Потом 2 тоже очевидна.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы