Archief - PHP: PHP5 & call by reference vs value

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

GizeH

Legacy Member
ik heb een recursieve functie als volgt:

function getParentIds($id_categorie, $ids)
{
//de parent items ophalen om de navigatiestructuur te tonen
$sql = 'SELECT Id_Parent FROM categorie WHERE Id = '.$id_categorie;
echo $sql.'<hr />';
$result = mysql_query($sql) or die(mysql_error());
if ($row = mysql_fetch_assoc($result))
{
array_push($ids, $row);
getParentIds($row['Id_Parent'], $ids);
}
else
{
echo 'nn<pre>';
print_r($ids);
echo '</pre><hr />';
return $ids;
}
}

de array $ids wordt goed opgevuld, de print_r binnen de functie toont het gewenste resultaat.

Maar als ik dit doe:

$ids = getParentIds($id_parent, $ids = array());
en buiten de functie print_r($ids);
dan is die array leeg...

weet iemand hoe ik dit doe (in php4 gaf ik gewoon & mee maar in php5 kan dit niet meer zonder een php.ini instelling te veranderen, wat ik niet wil...)

Radiance

Legacy Member
allow_call_time_pass_reference, de configuratie parameter waar jij het over hebt verbied (als hij af staat) dat je bij het aanroepen van de functie de variable by ref meegeeft. Je kan dit perfect blijven doen in de functie declaratie zelf.

PHP:
function getParentIds($id_categorie, &$ids) {}

killgore

Legacy Member
GizeH zei:
ik heb een recursieve functie als volgt:

function getParentIds($id_categorie, $ids)
{
//de parent items ophalen om de navigatiestructuur te tonen
$sql = 'SELECT Id_Parent FROM categorie WHERE Id = '.$id_categorie;
echo $sql.'<hr />';
$result = mysql_query($sql) or die(mysql_error());
if ($row = mysql_fetch_assoc($result))
{
array_push($ids, $row);
getParentIds($row['Id_Parent'], $ids);
}
else
{
echo 'nn<pre>';
print_r($ids);
echo '</pre><hr />';
return $ids;
}
}

de array $ids wordt goed opgevuld, de print_r binnen de functie toont het gewenste resultaat.

Maar als ik dit doe:

$ids = getParentIds($id_parent, $ids = array());
en buiten de functie print_r($ids);
dan is die array leeg...

weet iemand hoe ik dit doe (in php4 gaf ik gewoon & mee maar in php5 kan dit niet meer zonder een php.ini instelling te veranderen, wat ik niet wil...)

(heb debug output even weggelaten):

PHP:
function getParentIds($id_categorie, $ids)
{
	//de parent items ophalen om de navigatiestructuur te tonen
	$sql = 'SELECT Id_Parent FROM categorie WHERE Id = '.$id_categorie;
	$result = mysql_query($sql) or die(mysql_error());
	if ($row = mysql_fetch_assoc($result))
	{
		$ids = array_push($ids, $row);
		getParentIds($row['Id_Parent'], $ids);
	}
	else
	{
		return $ids;
	}
}
?

en anders zoals radiance zei je declaratie omvormen tot:
function getParentIds($id_categorie, &$ids)

edit: maar als je pass-by-reference doet mag je niet iets als $ids=array(); meegeven bij mijn weten sinds php5. Enkel variabelen zijn toegestaan, geen expressies.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan