NiTrino Posted May 9, 2008 Report Posted May 9, 2008 Bik murgains title, bet nu es kaut kā neizprotu: Ir funkcija, kurā ir cita funkcija (kas izpildās rekursīvi). Pirmajā funkcijā ir masīvs, kurš ir aizpildīts. Otrajā mēģinu tam masīvam piekļūt caur global, bet nesanāk: function A () { $array = array(); function B () { global $array(); var_dump ($array); // NULL B(); } $array[] = 1; var_dump ($array); // array(1) {[0]=>int(1)} B(); }
andrisp Posted May 9, 2008 Report Posted May 9, 2008 (edited) Nu bet protams :) global $array(); Tu zini, ko tas nozīmē ? http://lv.php.net/manual/en/functions.variable-functions.php Un vipār - funkcija iekš funkcijas galīgi nav laba ideja. Vismaz iekš PHP nu točna. Edited May 9, 2008 by andrisp
NiTrino Posted May 9, 2008 Author Report Posted May 9, 2008 Piedod, iekš example pārrakstījos, nav tur $array(), ir vienkārši global $array; Jā bet man vienu lietu vajag izpildīt kas nav rekursīvi, pārējās vajag rekursīvi, un lai nav 2 funkcijas, apvienoju vienā.
bubu Posted May 9, 2008 Report Posted May 9, 2008 Kāpēc gan ne? Tā kā php nav normālu neimspeisu, tad šis ir ļoti labs veids kā lokālas funkcijas "paslēpt" no ārpuses - tb nepiemēslot globālo neimspeisu.
andrisp Posted May 9, 2008 Report Posted May 9, 2008 (edited) bubu, B() funkcija būs pieeja arī ārpus A() funkcijas ietvariem. Un man liekas, tieši šī iemesla dēļ, ka B() nepieder A() funkcijai, tad arī tu nevari piekļūt $array masīvam. Tb PHP acīs tas kods ir +/- analogs šim: function A () { $array = array(); $array[] = 1; var_dump ($array); // array(1) {[0]=>int(1)} B(); } function B () { global $array; var_dump ($array); // NULL B(); } Kā arī - izsauc funkciju A() otreiz - dabūsi kļūdu Cannot redeclare. Protams, to var apiet ar function_exists(). Edited May 9, 2008 by andrisp
NiTrino Posted May 9, 2008 Author Report Posted May 9, 2008 ok, nācas tad pārtaisīt par $array = array(); function A () { global $array; ... B(); } function B () { global $array; }
bubu Posted May 9, 2008 Report Posted May 9, 2008 bubu, B() funkcija būs pieeja arī ārpus A() funkcijas ietvariem. Ah, nu tad jā, nevajag tā darīt gan. NiTrino: a kas vainas šim? function A() { $array = array(); ... B($array); } function B($array) { ... }
NiTrino Posted May 9, 2008 Author Report Posted May 9, 2008 (edited) jā, var arī tā. vienk man tas arrays nav prioritāte (bet vajadzīgs lai viss korekti strādātu), tāpēc negribēju padot viņu tādā veidā. un tā kā B() ir rekursīva funkcija, papildus parametrs jādod visu laiku Edited May 9, 2008 by NiTrino
bubu Posted May 9, 2008 Report Posted May 9, 2008 Nu tad uztaisi to kā klases memberu, un nebūs manuāli jāpadod: class B { var $array; function fun() { ... $this->array[] = ...; $this->fun(); } } function A() { $b = new B(); $b->array = array(1, 2, 3); // vai arī šo prātīgāk būtu padod B konstruktoram $b->fun(); }
Recommended Posts