Как работает `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