Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функции из другой функции с параметрами. 
:(
    Опции темы
GAM
Дата 14.6.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 3.3.2005

Репутация: нет
Всего: 2



Существует мнение, что повторяющийся код удобней выносить в отдельные функции.
А как быть в таком случае?

Имеются 2 функции, в которых повторяется код в блоке switch.

Код
function display1($arg1, $arg2, $arg_arr)
{
switch($arg2)
case 0:
...
break;
default:
...
break;
... Индивидуальный код функции
}

function display2($arg1, $arg3, $arg_arr)
{
switch($arg3)
case 0:
...
break;
default:
...
break;
... Индивидуальный код функции
}

display1($arg1, $arg2, $arg_arr);
display2($arg1, $arg3, $arg_arr);


При вызове 2 функций(display1 и display2), которые имеют общий код вычесления какого-то общего параметра в блоке switch, возникает мысль вынести его  в отдельную одиночную функцию.
Как при этом должны возвращаться переменные в функции, если их несколько?
Один из вариантов решения - это рассчитывать блок switch перед вызовом функции и передавать туда уже рассчитанные переменные, но это часный случай.
В моём случае, в блоке switch используются переменные, которые рассчитываются внутри основной функции, поэтому такой вариант отпадает.

Пробовал реализовать вариантом вовращения массива, потому как возвращаться должно несколько значений:
Вывожу блок switch в отдельную функцию и параметры, которые в ней вычесляются, заношу в массив, а строкой return my_arr; возвращаю массив обратно.

Код

function my_switch($arg,$arg_arr)
{
switch($arg)
case 0:
...
break;
default:
...
break;
return my_arr;
}

function display1($arg1, $arg2, $arg_arr)
{
my_switch($arg2,$arg_arr);
echo my_arr[0];
... Индивидуальный код функции
}

function display2($arg1, $arg3, $arg_arr)
{
my_switch($arg3,$arg_arr);
echo my_arr[0];
... Индивидуальный код функции
}

display1($arg1, $arg2, $arg_arr);
display2($arg1, $arg3, $arg_arr);


Но почему-то этот массив (my_arr) не виден в основной функции откуды был произведён вызов.
Т.е. echo my_arr[0]; ничего не выводит :(
PM MAIL   Вверх
GAM
Дата 14.6.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 3.3.2005

Репутация: нет
Всего: 2



Проблему решил, осуществляя вызов вункции через переменную, куда и приходит всё, что передаёт return.
Код

my_arr = my_switch($arg2,$arg_arr);

И всё из-за незнания  smile 
PM MAIL   Вверх
Feldmarschall
Дата 14.6.2008, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



А сами функции display1 и display2 нужны для повторяющегося кода?
PM   Вверх
GAM
Дата 14.6.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 3.3.2005

Репутация: нет
Всего: 2



Да, там идут через цикл перерасчеты $arg2 и $arg3, которые нужны в расчетах функции my_switch().
Функции совсем разные, а вот 1 блок был одинаковый у обоих, вот и  задавался вопросом выноса его.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.