ugrás a tartalomhoz

paraméter átadás objektumok között

Thoer · 2006. Júl. 12. (Sze), 13.47
Sziasztok!

Az a gondom, hogy fejlesztettem magamnak egy új OO adminoldalt (a régi nem volt az). Na már most localhoston (php5) minden szép és jó, de a szerveren csak php4.3x van és ott nem jó.
Van egy form objektumom, ami tárolja a form_elementeket és ha kiadok egy setValues utasítást a formnak akkor az meghívja a form_elementek setValue() tagfüggvényét. A gond az, hogy úgy vettem észre, hogy nem értéket ad át, hanem gondolom pointert, mert függvény végén lekérdezve még jó választ ad a '$element->getValue()'. Az lenne a kérdés, hogy ezt hogy lehet/kell szépen megoldani?

Ez lenne a kérdéses kód:
<?php
function setValues($array = array()) {
  if ($this->edit > 0) {
    $query = "SELECT * FROM ".$this->sql_table." WHERE id=".$this->edit;
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
  }
  foreach ($this->elements as $element){
    $col = $element->getSQLCol();
    if (isset($array[$col])) $setValue = $array[$col];
    else if (isset($row[$col])) $setValue = $row[$col];
    $element->setValue($setValue);
  }
}
?>
Előre is köszönöm a segítségeteket!
 
1

tömböknél

breakline · 2006. Júl. 12. (Sze), 14.38
ha jól értem azt szeretnéd, hogy átadsz egy függvénynek egy tömböt, és azon változtatsz, nem a függvényben létrehozott lokális példányon.
A kulccsal együtt megteheted egyszerűen, pl.:

<?php
function do_this ($array) {
$return_array=array();
foreach ($array as $key=>$element) {
  //...itt csinálsz valamit az elemmel
  $new = $element; //most csak simán átmásoltam
  $return_array[$key]=$new;
 }
return $return_array;
}
//és akkor pl. $array=do_this($array)-al változtik a tömb

?>
most nem ugrik be, hogy a mutatok müködnek-e tömbök esetében is, na az a másik módszer, pl. do_this(&$array) hasonlóan

üdv
BL
2

nem voltam elég precíz

Thoer · 2006. Júl. 12. (Sze), 14.50
Elfelejtettem hozzátenni, hogy amit én átadok az mindig egy egyszerű sztring és semmi célom nincs vele, csak annyi, hogy az elem, aminek a setValue($value) függvényét meghívom, megjegyezze a saját értékét. Tehát köszi a választ, de nem erre gondoltam.
Még érdekesebb (azóta kipróbáltam), hogy ha nem változót akarok átadni, hanem egy sima sztringet, akkor is "elfelejti" az objektumom az értékét! Én nem értem, de amilyen elterjedt még mindig a php4, biztos, hogy ti már 1000x megoldottátok ezt a gondot...
3

& hiányzik valahol

Hodicska Gergely · 2006. Júl. 14. (P), 10.08
A lenti kód modellezi a form, formelemek viszonyát. A 1-es kommenttel bíró sorokban lévő & jelek biztosítják, hogy a $parent és a gyerek elemekben lévő $this->parent változók referenciák legyenek. A 2-es kommenttel bíró sorokban lévő & jelek mindegyikére szükség van ahhoz, hogy a $parent-ben letárolt gyerek elem, és a getChild által visszaadott egymás referenciái legyenek. És a 3-as kommentű helyre sem árt tenni egy &-t, bár az jelen esetben nem számít, de ha nem teszed ki, akkor a new operátor a konstruktorban létrehozott gyerek elem egy másolatát adná vissza.
<?php
	class child
	{
		function child(&$parent, $name) // 1
		{
			$this->parent =& $parent; // 1
			$this->name = $name;
			$this->value = $name;
		}

		function setValue($value)
		{
			$this->value = $value;
		}
	}

	class parent
	{
		function parent()
		{
			$this->childs = array();
		}

		function addChild($name)
		{
			$this->childs[$name] =& new child($this, $name); // 3
		}

		function &getChild($name) // 2
		{
			return $this->childs[$name];
		}
	}

	$parent = new parent();
	$parent->addChild('foo');

	$child =& $parent->getChild('foo'); // 2
	$child->setValue('bar');

	echo '<pre>'.htmlentities(print_r($child, true)).'</pre>';
	echo '<pre>'.htmlentities(print_r($parent->getChild('foo'), true)).'</pre>';
?>
Felhő
4

Köszönöm!

Thoer · 2006. Júl. 14. (P), 12.56
Valószínűleg ez lesz a gond és a megoldás.