2010-07-14 1 views
4

Недавно я заметил, что существует два способа печати нескольких операторов в PHP.Использование эха PHP, когда разница между ними. и, материя?

echo $a.$b; // Echo's $a and $b conjoined, and 
echo $a,$b; // Echo's $a and echo's $b. 

Есть ли какой-то момент времени, когда разница между этими двумя синтаксисами имеет значение?

ответ

6

Реально, нет.

echo $a.$b первый сцепляет $a и $b в новой строки, а затем передает его в качестве параметра echo, который печатает его.

echo $a,$b дает два параметра до echo, которые будут печатать оба.

Последнее немного более эффективно. Не так, как вы обычно заметили.

Существует разница в том, как он оценивается. echo $a, $b как письмо echo $a; echo $b;, два отдельных звонка. $b будет оценен после $a is echo 'd. Это может иметь значение, если ваши аргументы являются функциональными вызовами, которые сами echo что-то, но опять же, на практике это должно быть неактуальным, так как это плохая практика.

4

Разница не имеет значения при подавляющем большинстве обстоятельств.

Это may Подумайте немного, если вещи, которые вы объединяете вместе, чрезвычайно велики, где конкатенация может быть немного медленнее и может занимать больше памяти. Однако сосредоточиться на микро-оптимизации, как правило, самый худший способ ускорить процесс.

1

программно:

  1. конкатенации 2 строки в 1 переменную и отправить строковое представление в выходной буфер.

  2. Зацикливание двух переменных и отправка строкового представления в выходной буфер.

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

0

Я попросил члена ядра PHP много лет назад, и они сказали нет. Это просто еще один альтернативный синтаксис, который позволяет вам иметь несколько способов сделать что-то. Под капотом могут быть некоторые преимущества, но никто не заметил бы.

6

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

<?php 
echo 1, error(); // This outputs 1, then it displays an error 
?> 

В то время как первый из них не будет отражать первую часть.

<?php 
echo '1' . error(); // Only displays an error 
?> 

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

+1

Интересно. Хотя на практике это очень мало, так как я ожидал бы, что эти ошибки уровня PHP будут вести себя в основном не определенно. То есть вы никогда не хотите, чтобы этот тип кода использовался в вашем приложении, так что «1» будет напечатан или нет в этой ситуации, в значительной степени не имеет значения. :) – deceze

+2

Также объясняется следующее: Передача '1' и результата' error() 'в качестве отдельных параметров для' echo' работает, просто результат 'error()' не существует, и PHP отдельно выдает предупреждение. Но по крайней мере '1' является допустимым параметром. OTOH, пытающийся конкатенировать строку с результатом несуществующей функции, делает недействительным целое выражение, поэтому ничего не передается в 'echo', и PHP будет выдавать предупреждение отдельно в любом случае. ** Само предупреждение никогда не передается 'echo'! ** – deceze

+0

Это именно то, что я искал. Это и другое, которое упоминает строки CONCAT'ов, может занимать больше памяти и подобных. Интересная информация, спасибо. – Navarr

Смежные вопросы