Jump to content
php.lv forumi

Recommended Posts

Posted

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();
}

Posted

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ā.

Posted

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.

Posted (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 by andrisp
Posted

ok, nācas tad pārtaisīt par

$array = array();

function A () {
 global $array;
 ...
 B();
}

function B () {
 global $array;
}

Posted
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)
{
...
}

Posted (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 by NiTrino
Posted

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();
}

×
×
  • Create New...