[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему выводит именно это?
Эли4ка
Всем здравствуйте.
Не могу понять, почему
echo '1' . (print '2') + 3;
выводит 214. Кто-то может дат подробное объяснение или ссылку, где почитать.
Принт выводит 1 это знаю.

Так же не могу понят почему
print 4 + print 3;
print (4 + print 3); // 35
print (4) + print 3;
выведет 35.
а вот так:
(print 4) + print 3;

Выведет 43.
В мануале толком не нашла объяснения по этому вопросу.Прошу помощи. Спасибо.
twin
Последовательность выполнения команд, только и всего. Приоритеты. Ты ожидаешь результат "слева направо", а это не так. Тут сначала организуется стек, а потом отработка.

1. Сначала конструкцией print выводится 2; Именно выводится на экран. А высший приоритет, потому что в скобках.
2. Следом то, что возвращает print, складывается с 3, в итоге 4
2. Потом идет конкатенация слева '1' и вывод на экран того, что получилось, конструкцией echo

Итого имеем:
print( 2 );
$tmp = 1 + 3;
echo '1' . $tmp;

--------------
214


Ну и остальные по той же схеме.

Мне вот интересно, откуда ты берешь такие непрактичные задачи? :D

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
Цитата (twin @ 28.11.2019 - 09:36)
2. Следом то, что возвращает print, складывается с 3, в итоге 4

Ту самую единицу, да? которую принт всегда выводит в конце.

Спасибо большое за подробное разъяснение.
Тогда вопрос: print 4 + print 3; тут скобок нет. Как же получается, что вывод 35? Права налево что ли?

Цитата (twin @ 28.11.2019 - 09:36)
Мне вот интересно, откуда ты берешь такие непрактичные задачи? biggrin.gif

Zend smile.gif
twin
Не справа налево, а по приоритетам выполнения. Сначала чистый вывод, потом операция сложения и потом вывод результата.

Представь стек выполнения:

print 3;
$tmp = 4 + 1;
print $tmp;


Напомню, стек, это "первым вошел, последним вышел". Так что можешь в этом плане рассматривать "слева направо".

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
Спасибо большое.
Ron
Цитата (Эли4ка @ 28.11.2019 - 10:56)
Zend

Какой ты хочешь добиться цели, изучая подобные кейсы? Серьезно.

Michael
Цитата (Ron @ 28.11.2019 - 17:18)
Цитата (Эли4ка @ 28.11.2019 - 10:56)
Zend

Какой ты хочешь добиться цели, изучая подобные кейсы? Серьезно.

Речь может идти про тесты от Zend, то что они на сертификат спрашивают.

_____________
There never was a struggle in the soul of a good man that was not hard
Эли4ка
Просто как тестирование.

Да, Михаил, верно.
Ron
Цитата (Michael @ 29.11.2019 - 08:24)
Речь может идти про тесты от Zend, то что они на сертификат спрашивают.

Ну да, я примерно догадался.

Цитата (Эли4ка @ 29.11.2019 - 08:31)
Просто как тестирование.

Понятно, чисто для себя, значит. В книге Zend Certification Study Guide не было ответа на твой вопрос? Если смотреть квалификационные тесты, есть смысл ознакомиться с официальными материалами для подготовки.

Эли4ка
Цитата (Ron @ 29.11.2019 - 18:18)
В книге Zend Certification Study Guide не было ответа на твой вопрос? Если смотреть квалификационные тесты, есть смысл ознакомиться с официальными материалами для подготовки.

Не нашла. Может пропустила, конечно.
Guest
print 3;
$tmp = 4 + 1;
print $tmp;++"root$
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.