Invalid argument supplied for foreach() in clasa PHP

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
sterica
Mesaje: 285

Invalid argument supplied for foreach() in clasa PHP

Salutare,

Am urmatoarea clasa:

Cod: Selectaţi tot

class getTest {
public $prop1;
public $prop2;

function fnc1 ($argument){
	try {
		$arr1 = array();
		.....
		
		$this->prop1 = $arr1;
		
////////// $arr1 arata cam asa:
fnc1 Object
(		
	[prop1] => Array
		(
		[0] => Array
			(
			[id] => 1,
			[name] => Nume
			)
		....
		)
	[prop2] =>
)		
//////////////////////
            	$conn = null;
	}
	catch($e){
	...
	}
}

}

$vartest = new getTest;
$vartest -> fnc1($conn);
$vartest -> prop1;

$demo  = null;

foreach ($vartest as $item=>$val){
	foreach ($val as $v){
	$demo  .= "<option value='".$v['id']."'>".$v['name']."</option>";
	}
}
Dupa executia codului, foreach-ul returneaza corect valorile insa imi apare pe linia de cod cu al doilea foreach:

Cod: Selectaţi tot

Warning: Invalid argument supplied for foreach()
In arra1 imi este preluat si numele proprietatii prop2 si nu inteleg de ce.

Daca in clasa getTest elimin proprietatea public $prop2; nu imi mai returneaza acel warning, insa am nevoie de acea proprietate pentru ca clasa va mai avea metode.

De ce imi apare acel warning si cum il pot elimina?

Multumesc!

MarPlo Mesaje: 4343
Salut
In codul tau, $vartest reprezinta obiectul clasei getTest (cu proprietati si metode in el), nu un array /obiect cu structura fixa care sa fi parcus cu doua foreach().
- Cand se parcurge obiectul clasei, asa cum e la tine, ajunge la proprietati ale caror valori nu e un array care sa fie parcurs de al doilea foreach().

Daca ceea ce vrei e sa parcurgi array-ul din proprietatea $prop1, poti face asa:

Cod: Selectaţi tot

foreach ($vartest->prop1 as $item=>$val){
  foreach($val as $v){
    $demo  .="<option value='".$v['id']."'>".$v['name']."</option>";
  }
}

sterica Mesaje: 285
Am inteles, multumesc mult de explicatie si de ajutor!