Как работает `print`?
В настоящее время я просматриваю проблемы для Zend PHP 5 Certification Practice Test
и видел следующее:
print print('5') + print('4');
// output
// 461
// or
echo '3' + '0.5' , print('2') + 1;
// output
// 3.531
Как это работает? Описание и примеры из http://php.net/manual/en/function.print.php
ничего не уточнил...
Ответы
Ответ 1
print
не является функцией, это языковая конструкция. Он всегда возвращает 1
, и его приоритет ниже, чем арифметические. Так
print print('5') + print('4');
эквивалентно:
print (print ('5' + print '4'));
Выполняется следующее:
-
print 4
- печатает 4
и возвращает 1
.
- Вычислить
5 + 1
, который возвращает 6
.
-
print 6
- печатает 6
и возвращает 1
-
print 1
- печатает 1
(также возвращает 1, но ничего не получает результат, столь неулокальный).
So
echo '3' + '0.5' , print('2') + 1
эквивалентно:
echo (3 + 0.5);
echo (print (2 + 1));
Выполняется следующее:
- Вычислить
3 + 0.5
, который возвращает 3.5
-
echo 3.5
, который печатает 3.5
- Вычислить
2 + 1
, который возвращает 3
-
print 3
, который печатает 3
и возвращает 1
.
-
echo 1
, который печатает 1
Ответ 2
печать печати ('5') + печать ('4');
Сначала он печатается/выводится 4
(справа налево). Языковая конструкция print
всегда возвращает 1
(выводится, если эхо или печатается), поэтому print('5') + 1
выводит 6
. Затем в последнем отпечатке выводится возврат конструкции print
, которая 1
(как говорилось ранее). Таким образом, конечный результат будет 461
.
echo '3' + '0.5', print ('2') + 1;
В конструкции echo
langauge символ ,
является конкатенацией. Выводится первый '3' + '0.5'
, который равен 3.5
. Затем снова, как и раньше, print('2') + 1
вернет 3
, а при эхом print
выйдет 1
. Таким образом, конечный результат будет 3.531
.
Ответ 3
Если первый запуск печати "4" или печать "5" может быть зависимой от реализации. В этом случае сначала напечатано "4", а его "печать" вернула 1, который, кажется, был добавлен в "5" , чтобы получить "6". Наконец, был выведен код возврата "1" для печати ( "5" ).
'3' + '0,5' дает '3.5'. После этого (точка секвенции запятая) была напечатана "2" + 1 ( "3" ), и, наконец, печать вернула код возврата "1".
Я не уверен, что я буду рассматривать любую из этой зависимости от последовательности и порядка исполнения в качестве хорошей практики программирования. Если вам это нужно для экзамена, я подозреваю, что это может быть скорее "gotcha" или предупреждение о том, что не делать...
'print' и 'echo' ведут себя несколько иначе, но у меня нет моих PHP-текстов, чтобы точно описать, как они отличаются.
Ответ 4
Прежде всего, print
всегда возвращает 1. И, во-вторых, его можно вызывать без круглых скобок. И, наконец, следует учитывать приоритет оператора.
При этом ваш первый оператор может быть расчленен на следующую арифметическую структуру:
- Оценить
print('4')
: вывод 4 и вернуть 1
- Оценить
print('5') + 1
: вывод 6 и вернуть 1
- Оценить
print
: вывод 1
То же самое работает с вашим вторым оператором, но здесь вы должны учитывать приоритет приоритета оператора, +
имеет более высокий, чем ,
:
- Оценить
echo 3 + 0.5
: выход 3.5
- Вычислить
print('2') + 1
: выход 3 и вывести возвращаемое значение print()
, 1