После довольно продолжительного знакомства с PHP озадачился таким вопросом:
Можно ли заставить функцию вести себя по-разному в двух случаях: в случае если ее результат присваивается какой-то переменно или не присваивается.
Пример:
Код
Function hello_world()
{
if если присваивается
{
return "Hello world!";
}
else
{
echo "Hello world";
}
}
{
if если присваивается
{
return "Hello world!";
}
else
{
echo "Hello world";
}
}
и пример работы:
Код
$variable = hello_world(); // переменная получает значение "Hello world"
hello_world(); //выводится "Hello world"
hello_world(); //выводится "Hello world"
Я конечно понимаю что такое невозможно, но вдруг?

Спустя 13 минут, 25 секунд (21.01.2008 - 14:17) disc написал(а):
Помоему тебе ректально надо не к PHP обратиться, а к проктологу. Каков смысл всей этой затеи? функция возвращает результат, а вот в нее и передавай элементы которые хочешь заснуть в зад, возможно и себе.
Спустя 24 минуты, 29 секунд (21.01.2008 - 14:42) PollyMorph написал(а):
Спокойствие, только спокойствие! Батл пива, сиську в руку и три глубоких вдоха чередующихся с тремя глубокими выдохами...
Интерес к этому вопросу чисто академический. Что такое функция и для чего она предназначена я вполне осведомлен.
Предложение вида hello_world($flag_variable) меня тоже не устроит. Мне просто напросто интересно возможно ли впринципе то что я спросил или нет.
Интерес к этому вопросу чисто академический. Что такое функция и для чего она предназначена я вполне осведомлен.
Предложение вида hello_world($flag_variable) меня тоже не устроит. Мне просто напросто интересно возможно ли впринципе то что я спросил или нет.
Спустя 2 минуты, 20 секунд (21.01.2008 - 14:44) disc написал(а):
Помоему нет возможно это отследить, что я описал выше.
Спустя 22 дня, 23 часа, 21 минута, 17 секунд (15.02.2008 - 14:05) sergeiss написал(а):
Если взять за основу вопрос "Можно ли заставить функцию вести себя по-разному в двух случаях: в случае если ее результат присваивается какой-то переменной или не присваивается.", то ответ будет положительный 
Делаем функцию с переменным числом параметров, да еще и делаем передачу параметра по ссылке.
Выглядит это так:
function Hi( &$param="" )
{
if( func_num_args() <> 0 )
{
echo "Parameter sent<br>";
$param="Hi!!!";
return $param;
}
else
{
echo "Nothing";
return false;
}
}
Далее делаем тестовую прогу (текст функции вставляем тут же где-то)
<?php
$p="";
echo Hi( $p )."<br>";
echo $p."<br>";
$p="123";
echo Hi( $p )."<br>";
echo $p."<br>";
echo Hi( )."<br>";
?>
и после ее запуска получаем результат:
---
Parameter sent
Hi!!!
Hi!!!
Parameter sent
Hi!!!
Hi!!!
Nothing
---
Формально полученный результат полностью соответствует заданному вопросу. С той лишь разницей, что знак "равно" не используется для присвоения, как это написано у автора вопроса.
Итог - мой приз в студию

Делаем функцию с переменным числом параметров, да еще и делаем передачу параметра по ссылке.
Выглядит это так:
function Hi( &$param="" )
{
if( func_num_args() <> 0 )
{
echo "Parameter sent<br>";
$param="Hi!!!";
return $param;
}
else
{
echo "Nothing";
return false;
}
}
Далее делаем тестовую прогу (текст функции вставляем тут же где-то)
<?php
$p="";
echo Hi( $p )."<br>";
echo $p."<br>";
$p="123";
echo Hi( $p )."<br>";
echo $p."<br>";
echo Hi( )."<br>";
?>
и после ее запуска получаем результат:
---
Parameter sent
Hi!!!
Hi!!!
Parameter sent
Hi!!!
Hi!!!
Nothing
---
Формально полученный результат полностью соответствует заданному вопросу. С той лишь разницей, что знак "равно" не используется для присвоения, как это написано у автора вопроса.
Итог - мой приз в студию



Спустя 13 минут, 20 секунд (15.02.2008 - 14:18) Timok написал(а):
sergeiss, почитай что выше написано:
т.е. человек хотел без всяких лишних указаний определить присваивается ли какой-то переменной результат функции или нет. Ответ: нет.
Цитата(PollyMorph)
Предложение вида hello_world($flag_variable) меня тоже не устроит.
т.е. человек хотел без всяких лишних указаний определить присваивается ли какой-то переменной результат функции или нет. Ответ: нет.
Спустя 9 минут, 27 секунд (15.02.2008 - 14:28) sergeiss написал(а):
Цитата(Timok @ 15.2.2008, 14:18) [snapback]33658[/snapback]
sergeiss, почитай что выше написано:
т.е. человек хотел без всяких лишних указаний определить присваивается ли какой-то переменной результат функции или нет. Ответ: нет.
Цитата(PollyMorph)
Предложение вида hello_world($flag_variable) меня тоже не устроит.
т.е. человек хотел без всяких лишних указаний определить присваивается ли какой-то переменной результат функции или нет. Ответ: нет.
Да, но только я НЕ предлагаю передавать флаг. Я предлагаю передавать переменную, которой надо присвоить значение. Или - не передавать.
Поэтому и получаем, что если мы хотим получить результат от функции (и передаем переменную для присвоения результата), то мы одновременно задаем ей определенное поведение.
В ином случае, если мы не хотим получить результат, то мы просто ничего не передаем и функция выполняет какое-то другое действие.
В случае ИСПОЛЬЗОВАНИЯ ФЛАГА вызов будет "$param=hello_word(TRUE);" или "hello_word(FALSE);".
В моем случае будет вызов либо "hello_word( $param );", либо "hello_word();" без параметров (!!!). И это очень сильно отличается от случая использования флага.
Спустя 6 минут, 21 секунда (15.02.2008 - 14:34) Timok написал(а):
хотя да, не подумал...
Только логичнее тогда возвращать NULL, а не false, но вообщем-то не принциально...
Только логичнее тогда возвращать NULL, а не false, но вообщем-то не принциально...
_____________
Стране нужен МЕТАН