Autor Zpráva
Mufna
Profil
Zdravím Vás. Mám 2 vlastní funkce, první má vrátit pole $pole, druhá pak má toto pole přijmout jako argument a dále se s prvky tohoto pole uvnitř druhé funkce pracuje. Bohužel mi to ale takto nefunguje, vypadá to, že se to pole "ztratí" a ta druhá funkce už "o něm neví". Dá se to nějak řešit ? Mám to v kostce takto:
function funkce_1() {
  $pole = array(0=>0, 1=>0, 2=>0, 3=>0);  // prvotní definování pole 
  // nyní se s prvky pole pracuje, každý z nich může (nemusí) změnit hodnotu z 0 na 1.
  var_dump($pole);  // když si to tady vypíšu, tak je vše OK, tzn. vypíše se pole s případnými změněnými hodnotami prvků
  return $pole;
}

function funkce_2($pole) {

  var_dump($pole);  // a tady už mi to vyhodí pouze NULL
  // pokračuje zpracování, které potřebuje jednotlivé prvky pole $pole
}

v kódu se pak samozřejmě obě funkce volají za sebou v pořadí:
funkce_1();
funkce_2($pole);
Alphard
Profil
Pochopitelně, že se ztratí. Konstruktci $promenna = funkce(); neznáte?
Můžete to spojit, tj. funkce_2(funkce_1());
Mufna
Profil
Alphard
Konstruktci $promenna = funkce(); neznáte?

Bohužel ne. Ale navádíte mě šikovně, akorát zatím úplně přesně nevím jak to mám použít. Můžete mě ještě trošku popostrčit konkrétněji ? Předem díky.

EDIT Myslím, že už to snad chápu
Lamicz
Profil
$a = array();
$a = funkce_1();
funkce_2($a);
AM_
Profil
Lamicz:
$a = array(); - tenhle řádek je zbytečný, vždyť na dalším řádku tu hodnotu znovu přepíšeš, nemusíš ji inicializovat
$a = funkce_1();
funkce_2($a);
DoubleThink
Profil *
Mufna:
Alphard ti jen naznačuje, že pole z první funkce vracíš do nikam.
Lamicz
Profil
AM:
Já toto používám pro přehlednost kódu, že "bacha, $a je typ pole". Beru to něco jako definici typu proměnné.
DoubleThink
Profil *
Lamicz:
A komu to "bacha" říkáš? PHP má slabou typovou disciplínu.
AM_
Profil
Lamicz:
slyšel jsi někdy o PhpDocumentoru?
/**
 * Some example function
 *
 *@return array
 */
function funkce_1() { ... }

inteligentní IDE z tohoto dokonce pochopí, že $a je array.
Lamicz
Profil
AM:
Ano, i jsem v něm přes rok ve firmě dělal, ale teď dělám na projektu, kde to není ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0