выполняю данный код:
function func($str) {
echo $str;
}
echo '1'.func('2');
а на странице выводится --- 21
ведь должно выводится 12, не так ли?
Спустя 2 минуты, 21 секунда (14.10.2010 - 16:53) waldicom написал(а):
Не так ли. Сначала выполняется все, что стоит в echo, а потом само echo.
Если бы было по другому, то сложно представить себе, как должны использоваться функции внутри других функций.
Если бы было по другому, то сложно представить себе, как должны использоваться функции внутри других функций.
Спустя 7 минут, 42 секунды (14.10.2010 - 17:00) Crash2007 написал(а):
странно что я не встречался с этим раньше.......=() хм..
можешь объяснить что значит --- "Сначала выполняется все, что стоит в echo, а потом само echo" ?...
можешь объяснить что значит --- "Сначала выполняется все, что стоит в echo, а потом само echo" ?...
Спустя 6 минут, 33 секунды (14.10.2010 - 17:07) waldicom написал(а):
Цитата (Crash2007 @ 14.10.2010 - 16:00) |
странно что я не встречался с этим раньше.......=() хм.. можешь объяснить что значит --- "Сначала выполняется все, что стоит в echo, а потом само echo" ?... |
echo '1'.func('2');
парсер видит, что идет вызов echo. Он смотрит внутрь: видит строку ("1") и функцию (.func('2')). Сначала выполняем функцию, а потом добавляем все остальное (в данном случае строку "1")
Для интереса предскажи, что будет выводиться вот в примере ниже, а потом проверь себя.
echo func('3').'1'.func('2').'4';
добавил точку
Спустя 20 минут, 38 секунд (14.10.2010 - 17:27) DedMorozzz написал(а):
func('3')'1'
ерора
Спустя 3 минуты, 58 секунд (14.10.2010 - 17:31) waldicom написал(а):
Цитата (DedMorozzz @ 14.10.2010 - 16:27) |
func('3')'1' ерора |
мерси
Спустя 2 часа, 8 минут, 33 секунды (14.10.2010 - 19:40) linker написал(а):
Цитата |
парсер видит, что идет вызов echo. Он смотрит внутрь: видит строку ("1") и функцию (.func('2')). Сначала выполняем функцию, а потом добавляем все остальное |
Я думаю все намного прозаичнее, просто
echo '1' . func('2');не выведет результат до тех пор, пока не будет получена конечная строка. Т.е. сначала в буфер идет '1', потом выполняет функцию func(), т.к. там тоже есть эхо, то выведется '2', т.к. функция ничего не вернула, то первый эхо отдаст на вывод '1', в результате получаем '21'.
Почему так? Да потому, что функция не имеет приоритета выполнения, зато при конкатенации строк, приоритет имеет левая часть, поэтому '1' будет выполнено раньше, чем вызов func(), но т.к. php не получил еще строку целиком, поэтому он ее не выводит до самого конца разбора. Надеюсь понятно объяснил.
Кстати, напишите вот так
echo '1', func('2');и получите свой результат '12'
Спустя 12 минут, 54 секунды (14.10.2010 - 19:53) ZSH написал(а):
или так
function func($str) {
return $str;
}
echo '1'.func('2');
Спустя 8 минут, 39 секунд (14.10.2010 - 20:02) linker написал(а):
Люблю такие задачи, вот например
<?phpКакой будет результат и почему?
function func($num)
{
echo $num;
return $num;
}
echo '2' . print(func('3')), (true == true) . print('4') . (1 != 1);
?>
Спустя 3 часа, 19 минут, 30 секунд (14.10.2010 - 23:21) kovaldm написал(а):
Разобрался!
Результат: 3321411
Почему:
1. Сначала выводится результат работы функции func() - 3
2. Затем возвращаемое функцией значение 3
3. Потом '2'
4. 1 - возвращается конструкцией print
5. 4 - print('4')
6. 1 - (true == true)
7. 1 - возвращается конструкцией print
Критикуем.
Результат: 3321411
Почему:
1. Сначала выводится результат работы функции func() - 3
2. Затем возвращаемое функцией значение 3
3. Потом '2'
4. 1 - возвращается конструкцией print
5. 4 - print('4')
6. 1 - (true == true)
7. 1 - возвращается конструкцией print
Критикуем.
Спустя 4 часа, 39 минут, 49 секунд (15.10.2010 - 04:01) arvitaly написал(а):
Цитата |
2. Затем возвращаемое функцией значение 3 |
Лучше назвать это - действием функции print
Спустя 4 часа, 16 минут, 26 секунд (15.10.2010 - 08:17) linker написал(а):
print() - это функция, поэтому это лучше назвать - значение, возвращаемое функцией и никак иначе.
А так браво.
А так браво.
Спустя 15 минут, 48 секунд (15.10.2010 - 08:33) arvitaly написал(а):
Цитата |
print() - это функция, поэтому это лучше назвать - значение, возвращаемое функцией и никак иначе. |
print возвращает 1, а я говорю про 3
Спустя 9 минут, 10 секунд (15.10.2010 - 08:42) linker написал(а):
arvitaly
Не, это он про значение, которое возвращает func(), а не про то, которое печатает print(), посмотри внимательно.
Не, это он про значение, которое возвращает func(), а не про то, которое печатает print(), посмотри внимательно.
Спустя 5 минут, 41 секунда (15.10.2010 - 08:48) arvitaly написал(а):
Цитата |
Не, это он про значение, которое возвращает func(), а не про то, которое печатает print(), посмотри внимательно. |
Да я понял, но печатает его print, а принту не важно функция в него вернула что-то или просто вписали. Поэтому правильнее - результат работы функции print.
Ну это не так принципиально
_____________
Рисую на PHP :)