Реклама на сайте Advertise with us

Вернуть несколько значений из функции

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/05/08 в 10:40       Ответить с цитатойцитата 

к примеру имеем:

Код:

function bla($var,$array)
{
...
return $result;
}


а если мне надо вернуть не одно значение, а несколько?
после ретурна, выполнение кода функции прекращается, если все необходимое засунуть в массив, то опять же придется извлекать каждое его значение, получиться масло маслянное
Оффтопик:
пока писал вопрос, навскидку появилось пару мыслей, но я не думаю что это что то оптимизирует

x100BTC.com Промокод SudDude009 подключить бесплатно и навсегда.

0
 



С нами с 07.09.03
Сообщения: 4115
Рейтинг: 2060

Ссылка на сообщениеДобавлено: 20/05/08 в 10:59       Ответить с цитатойцитата 

передай несколько параметров по ссылке

var $var1;
var $var2;

function bla(&$var1, &$var2)
{

$var1 = 2;
$var2 = 3;

}

если пользуешься класами - используй свойства класса, если нет - используй global $var1; global $var2; если не хочешь по ссылке передавать.

5
 



С нами с 07.09.03
Сообщения: 4115
Рейтинг: 2060

Ссылка на сообщениеДобавлено: 20/05/08 в 11:03       Ответить с цитатойцитата 

5
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/05/08 в 11:06       Ответить с цитатойцитата 

оценил

x100BTC.com Промокод SudDude009 подключить бесплатно и навсегда.

0
 



С нами с 16.10.02
Сообщения: 1261
Рейтинг: 937


Передовик Master-X (16.03.2023) Передовик Master-X (01.04.2023) Передовик Master-X (01.08.2023) Передовик Master-X (16.08.2023) Передовик Master-X (01.10.2023) Ветеран трепа Master-X (16.10.2023)
Ссылка на сообщениеДобавлено: 20/05/08 в 11:07       Ответить с цитатойцитата 

А я не пойму, что значит "придется извлекать каждое его значение"? Просто берешь и используешь:

Код:
function bla($var,$array)
{
...
$result['one'] = 'Hello!';
$result['two'] = 15;
$result['three'] = $newarray;
return $result;
}

$bla = bla($var,$array);
// переменные готовы:
echo $bla['one'];
echo $bla['two'];
echo $bla['three'];

2
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/05/08 в 11:14       Ответить с цитатойцитата 

fil писал:
А я не пойму, что значит "придется извлекать каждое его значение"? Просто берешь и используешь:

Код:
function bla($var,$array)
{
...
$result['one'] = 'Hello!';
$result['two'] = 15;
$result['three'] = $newarray;
return $result;
}

$bla = bla($var,$array);
// переменные готовы:
echo $bla['one'];
echo $bla['two'];
echo $bla['three'];



не спорю, можно и так,
только если там 50 извлекаемых переменных, можно и руки сломать, пока все укажешь

x100BTC.com Промокод SudDude009 подключить бесплатно и навсегда.

0
 



С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430

Ссылка на сообщениеДобавлено: 20/05/08 в 11:14       Ответить с цитатойцитата 

Тоже хотел написать чтобы юзал массив.
Так же по ссылке можешь переменные складывать или юзать глобальные переменные.

3
 



С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430

Ссылка на сообщениеДобавлено: 20/05/08 в 11:16       Ответить с цитатойцитата 

freeek писал:
не спорю, можно и так,
только если там 50 извлекаемых переменных, можно и руки сломать, пока все укажешь

Почему?
Ты ведь можешь не задавать их всех а просто
for($i = 0; $i< 50); $i++){
$result[] = $i;
}
return $rusult;
Думаю не оболомишся

3
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 20/05/08 в 11:22       Ответить с цитатойцитата 

dDan писал:
Почему?
Ты ведь можешь не задавать их всех а просто
for($i = 0; $i< 50); $i++){
$result[] = $i;
}
return $rusult;
Думаю не оболомишся


это можно сделать и попроще,
но суть в том что, я просто не вдавался в дебри, т.е.

если речь идет и массивах, то это определенный стринговый кей для каждого значения

извлечь, проблем нету,
а вот потом, что ними будем делать дальше - это вопрос,
если каждая переменная, ранее уже имеет свое имя и смысловую нагрузку,
то тупо, чтобы не запутаться, такой вариант мало привлекательный


впринципе, всех вблагодарю и оценил, топик можно считать закрытым smail04.gif

x100BTC.com Промокод SudDude009 подключить бесплатно и навсегда.

0
 



С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760


Передовик Master-X (01.03.2005) Передовик Master-X (16.03.2005) Передовик Master-X (16.10.2016) Передовик Master-X (01.11.2016) Передовик Master-X (16.11.2016) Ветеран трепа Master-X (01.12.2016)
Ссылка на сообщениеДобавлено: 20/05/08 в 13:00       Ответить с цитатойцитата 

ассоциативный массив используй по аналогии выше с 'one'...
сделай вида 'takae_peremennaya', 'drugaya_peremennaya'...

какие тут могут быть проблемы?

3
 



С нами с 07.09.03
Сообщения: 4115
Рейтинг: 2060

Ссылка на сообщениеДобавлено: 20/05/08 в 13:08       Ответить с цитатойцитата 

freeek писал:
это можно сделать и попроще,
но суть в том что, я просто не вдавался в дебри, т.е.

если речь идет и массивах, то это определенный стринговый кей для каждого значения

извлечь, проблем нету,
а вот потом, что ними будем делать дальше - это вопрос,
если каждая переменная, ранее уже имеет свое имя и смысловую нагрузку,
то тупо, чтобы не запутаться, такой вариант мало привлекательный


впринципе, всех вблагодарю и оценил, топик можно считать закрытым smail04.gif


а вообще юзай ООП, и у тебя не будет возникать таких вопросов icon_smile.gif

3
 

Милитарист

С нами с 13.01.06
Сообщения: 677
Рейтинг: 569

Ссылка на сообщениеДобавлено: 20/05/08 в 13:08       Ответить с цитатойцитата 

[url=http://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование]ООП[/url] и [url=http://ru.wikipedia.org/wiki/Класс_(программирование)]классы[/url] спасут детей русской демократии. icon_smile.gif

Ыыыю.. А че русские урлы низззя?

подкаст для тех кто в бизе: https://anchor.fm/hibrokakbiz

3
 



С нами с 07.09.03
Сообщения: 4115
Рейтинг: 2060

Ссылка на сообщениеДобавлено: 20/05/08 в 13:12       Ответить с цитатойцитата 

одна и та же мысль была выдана двумя человеками одновременно в 14:08 icon_smile.gif
ООП форева!

3
 



С нами с 03.05.07
Сообщения: 801
Рейтинг: 825

Ссылка на сообщениеДобавлено: 20/05/08 в 23:31       Ответить с цитатойцитата 

Ну можно конечно вот так вот изъебнуться:

Код:

function func()
{
$ret["one"]=1;
$ret["two"]=2;
$ret["three"]=3;

return $ret;
}

extract(func());
echo $one;
echo $two;


Таким образом, в функции все переменные заносятся в массив, а при окончании выполнения функции этот массив преобразовывается в переменные. Но это то же, если перечислить все переменные в global фукнкции, хотя более гибко.

Вообще не понятно, зачем такое нужно. Нет описания задачи.

Цитата:
а вот потом, что ними будем делать дальше - это вопрос

Тогда надо писать на объектах, чтобы все переменные работали в пределах каждого объекта.

создай свою партнёрку

4
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 21/05/08 в 06:03       Ответить с цитатойцитата 

если результат тот, который ожидаю
то этого вполне хватит

x100BTC.com Промокод SudDude009 подключить бесплатно и навсегда.

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 22/05/08 в 15:44       Ответить с цитатойцитата 

Используй массивы, самый простой и работоспособный способ.
Или еще вариант:
Код:

<?
function arr(){
  for($i=0;$i<10;$i++)
  { $a .= $i; }
  return $a;
}
?>

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

5
 



С нами с 18.08.04
Сообщения: 6376
Рейтинг: 4430

Ссылка на сообщениеДобавлено: 22/05/08 в 17:30       Ответить с цитатойцитата 

ну и нахрена строчку выводить?
можно правда делать $st .= $i.'|'
а потом сделать explode, Но имхо ахинея

5
 



С нами с 04.11.05
Сообщения: 178
Рейтинг: 122

Ссылка на сообщениеДобавлено: 22/05/08 в 19:04       Ответить с цитатойцитата 

можно ещё так извратится:
Код:

function abc(){
  return Array(12345,67890)
}

list($v1,$v2)=abc();

хотя массивы уже предлагали, но такое почитабельнее imho

5
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 22/05/08 в 20:43       Ответить с цитатойцитата 

вариант extract подошел, а я даже и забыл про него,
вернее думал он по другому работает

x100BTC.com Промокод SudDude009 подключить бесплатно и навсегда.

0
 



С нами с 03.07.05
Сообщения: 474
Рейтинг: 231

Ссылка на сообщениеДобавлено: 23/05/08 в 14:25       Ответить с цитатойцитата 

Лучше уже использовать массив, так как глобальные переменные обещают убрать в 6м пхп.

PROMO!!! Free Dedicated servers! Send me PM.
Dedicated servers in Europe (DE,NL,RO) and USA from 39$.

5
 



С нами с 27.04.06
Сообщения: 72
Рейтинг: 20

Ссылка на сообщениеДобавлено: 27/05/08 в 20:37       Ответить с цитатойцитата 

Если значений не много и хочется сделать компактно - то еще можно так:

function func()
{
$ret[]=1;
$ret[]=2;
$ret[]=3;

return $ret;
}

list($one, $two, $three) = func();

Хотя ООП конечно рулит icon_smile.gif

CJ Engine для профессионалов

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »