NiTrino Posted May 9, 2008 Report Share 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(); } Link to comment Share on other sites More sharing options...
andrisp Posted May 9, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
NiTrino Posted May 9, 2008 Author Report Share 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ā. Link to comment Share on other sites More sharing options...
bubu Posted May 9, 2008 Report Share 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. Link to comment Share on other sites More sharing options...
andrisp Posted May 9, 2008 Report Share 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 Link to comment Share on other sites More sharing options...
NiTrino Posted May 9, 2008 Author Report Share Posted May 9, 2008 ok, nācas tad pārtaisīt par $array = array(); function A () { global $array; ... B(); } function B () { global $array; } Link to comment Share on other sites More sharing options...
bubu Posted May 9, 2008 Report Share 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) { ... } Link to comment Share on other sites More sharing options...
NiTrino Posted May 9, 2008 Author Report Share 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 Link to comment Share on other sites More sharing options...
bubu Posted May 9, 2008 Report Share 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(); } Link to comment Share on other sites More sharing options...
Recommended Posts