Функции-переменные и параметры по ссылке

cray

Guest
Функции-переменные и параметры по ссылке

Народ, памагите...
Перерыл весь манул (может плохо рыл :)) но ниче не нашел.
Проблема в передаче параметра по ссылке в функцию-переменную... Значение параметра передается, но, как я понял, не ссылка, потому что изменить этот параметр нельзя. Например, при обычном вызове:
PHP:
function foo(&$param)
{
    $param = "New Value";
}

$a = "Old Value";
foo($a); // теперь $a == "New Value"
-- так все работает, а при вызове через переменную нифига:
PHP:
$a = "Old Value";
$func_name = "foo";
$func_name($a); // $a == "Old Value"
Пробовал и call_user_func() - то же самое :(

Если второй вариант (вызов через переменную) реализуем, то как?? Если вообще никак, то буду переписывать по-другому, хотя так удобнее :)

Заранее спасибо.
 

Crazy

Developer
Беру код:

PHP:
<?php
function foo(&$param) 
{ 
  $param = "New Value"; 
} 
$a = "Old Value"; 
foo($a); 
echo $a."\n";
$a = "Old Value"; 
$func_name = "foo"; 
echo $a."\n";
$func_name($a);
echo $a."\n";
?>
Ответ:

Код:
New Value
Old Value
New Value
Что не так?
 

cray

Guest
та-а-а-к, не поверишь, у меня тоже работает :)
но как ты уже догадался, функцию я писал не из своего исходника... ща приведу более реальную картину...
Пишу генератор и проверщик форм...
Наверно я понял, в чем тупеж
PHP:
foreach ($this->fields as $field)
{
	if (!$field['func']) continue;
	if (($field['name'] == $this->p1_name) || ($field['name'] == $this->p2_name))
	{
		$found_pass++;
		continue;
	}

	$func_name = "valid_".$field['func'];
	if ($err = $func_name($field['value']))
	{
		$field['class'] = "class=\"error\" ";
		$error .= $err;
	}

} // foreach
вопрос: можно ли таким макаром (изменяя $field в foreach) изменить $this->fields ???
Наверно нельзя, но все же спрошу....
 

Фанат

oncle terrible
Команда форума
застрелиться и не жить.
у тебя отдельная функция по проверке каждого поля?
 

cray

Guest
2Фанат:
А че тут такого?
Ну может подумаю немного, и перепишу одной функцией (по-любому все оформлено в виде отдельного класса, так что остальное затрагивать не прийдется) :)
Короче я тут типа разобрался - добавил ключ-имя поля и немного переписал - терь все работает:
PHP:
$func_name = "valid_".$field['func'];
if ($error = $func_name($this->fields[$field['name']]['value']))
{
	$this->fields[$field['name']]['class'] = "class=\"error\" ";
	$this->errors .= $error;
}
А в foreach переменная после as - это тока значение?? и никак к исходной переменной не относится?
 

Crazy

Developer
Автор оригинала: cray
вопрос: можно ли таким макаром (изменяя $field в foreach) изменить $this->fields ???
Hint: не обязательно гонять foreach по значениям. Есть еще и ключи.
 

cray

Guest
просто раньше эти функции использовались раздельно и вот я их решил в один класс загнать, наверно точно сделаю одну
 

Фанат

oncle terrible
Команда форума
интерпретаторы развращают неокрепшие детские души
 

cray

Guest
2Crazy:
а array_keys() не сильно медленная???

-~{}~ 05.09.04 23:33:

2Фанат:
это ты о чем? :)
 
Сверху