[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: непонятно что с функцией?!
Crash2007
ohmy.gif реально непонятно...
выполняю данный код:
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" ?...

Спустя 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'

ерора rolleyes.gif

Спустя 3 минуты, 58 секунд (14.10.2010 - 17:31) waldicom написал(а):
Цитата (DedMorozzz @ 14.10.2010 - 16:27)
func('3')'1'

ерора rolleyes.gif

мерси

Спустя 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

Критикуем.

Спустя 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(), посмотри внимательно.

Спустя 5 минут, 41 секунда (15.10.2010 - 08:48) arvitaly написал(а):
Цитата
Не, это он про значение, которое возвращает func(), а не про то, которое печатает print(), посмотри внимательно.


Да я понял, но печатает его print, а принту не важно функция в него вернула что-то или просто вписали. Поэтому правильнее - результат работы функции print.

Ну это не так принципиально


_____________
Рисую на PHP :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.