Я считаю, что необязательно знать разницу между ними, но все же мне было интересно разобраться, потому как умение досконально разобраться в вопросе — полезное умение 🙂
Самое логичное объяснение (не вдаваясь в подробности) разницы состоит в том, что print это функция, а echo — конструкция языка. Ведь все совпадает?
Я так и думал. Решил пойти не самым стандартным путем, но все же.
Я скачал сорцы php, нашел там тест функции print (хотел найти сорцы функции, которые как я сейчас понимаю дали бы мне не много), но к своему удивлению в заголовке теста нашел:
/* Prototype : int print ( string $arg )
* Description: Output a string
* Source code: n/a, print is a language construct not an extension function
* Test based on php.net manual example.
*/
Потом я полез куда надо, а именно в мануалы php.
print — Output a string
Description
print ( string $arg)
Outputs arg.
print() is not actually a real function (it is a
language construct) so you are not required to use parentheses
with its argument list.
Return Values
Returns 1, always.
echo Output one or more strings
Description
void echo ( string $arg1 [, string$…] )
Outputs all parameters.
echo() is not actually a function (it is a
language construct), so you are not required to use parentheses
with it. echo() (unlike some other language
constructs) does not behave like a function, so it cannot
always be used in the context of a function. Additionally, if you want to
pass more than one parameter to echo(), the parameters
must not be enclosed within parentheses.
Return Values
No value is returned.
Вот они и очевидные различия:
1 Print, в отличие от echo зачем то всегда возвращает 1
2 В echo, в отличие от print можно передавать больше 1 строки
К сожалеию, в силу своего малого опыта я не понимаю этих особенностей и областей их применения, но надеюсь когда-нибудь это станет понятно.
Единственное, что приходит в голову сразу же, это наверное то, что:
1 | echo $string1, $string2; |
будет работать быстрее, чем
1 | print ($string1 . $string2); |
и соответственно
1 | echo ($string1 . $string2); |
Потому что, если я опять же все правильно понял, в первом случае строчки выведутся, а во втором сначала сложатся, а потом выведется результирующая строка. Но нет, так нет, тогда я ничего не понял 🙂
я внимательно прочитала ваши выводы и тоже порылась в мануалах. Вы скромничаете! Все на мой взгляд так и остоит. Принт древняя и мало интересная функция, и если ее часто использовать то прирост затрат рисурсной части есть. Я на своем VPN сервере просто тестила…
vinogradinka, на каком VPN севере? 😀
Или я чего не понял?