[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ректальный PHP
PollyMorph
Доброго времени суток, уважаемые.

После довольно продолжительного знакомства с PHP озадачился таким вопросом:
Можно ли заставить функцию вести себя по-разному в двух случаях: в случае если ее результат присваивается какой-то переменно или не присваивается.
Пример:

Код
Function hello_world()
{
if если присваивается
     {
          return "Hello world!";
     }

else
     {
           echo "Hello world";
     }
}


и пример работы:

Код
$variable = hello_world(); // переменная получает значение "Hello world"
hello_world(); //выводится "Hello world"


Я конечно понимаю что такое невозможно, но вдруг? rolleyes.gif



Спустя 13 минут, 25 секунд (21.01.2008 - 14:17) disc написал(а):
Помоему тебе ректально надо не к PHP обратиться, а к проктологу. Каков смысл всей этой затеи? функция возвращает результат, а вот в нее и передавай элементы которые хочешь заснуть в зад, возможно и себе.

Спустя 24 минуты, 29 секунд (21.01.2008 - 14:42) PollyMorph написал(а):
Спокойствие, только спокойствие! Батл пива, сиську в руку и три глубоких вдоха чередующихся с тремя глубокими выдохами...
Интерес к этому вопросу чисто академический. Что такое функция и для чего она предназначена я вполне осведомлен.
Предложение вида hello_world($flag_variable) меня тоже не устроит. Мне просто напросто интересно возможно ли впринципе то что я спросил или нет.

Спустя 2 минуты, 20 секунд (21.01.2008 - 14:44) disc написал(а):
Помоему нет возможно это отследить, что я описал выше.

Спустя 22 дня, 23 часа, 21 минута, 17 секунд (15.02.2008 - 14:05) sergeiss написал(а):
Если взять за основу вопрос "Можно ли заставить функцию вести себя по-разному в двух случаях: в случае если ее результат присваивается какой-то переменной или не присваивается.", то ответ будет положительный smile.gif

Делаем функцию с переменным числом параметров, да еще и делаем передачу параметра по ссылке.

Выглядит это так:

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
---

Формально полученный результат полностью соответствует заданному вопросу. С той лишь разницей, что знак "равно" не используется для присвоения, как это написано у автора вопроса.

Итог - мой приз в студию smile.gif smile.gif smile.gif

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


_____________
Стране нужен МЕТАН
Быстрый ответ:

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