Jump to content
php.lv forumi

Masīva izmantošana iekš funkcijas funkcijā


NiTrino

Recommended Posts

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

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

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 by andrisp
Link to comment
Share on other sites

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

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 by NiTrino
Link to comment
Share on other sites

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

×
×
  • Create New...