Указатель и func_get_args();

snark

Новичок
Указатель и func_get_args();

Немогу реализовать динамическое кол-во параметров в функции, точнее не могу передавать указатели. Вот пример:

PHP:
function pointer($event) 
{
$params = func_get_args();
	unset($params[0]["index1"]);
}

function pointer2(&$event) 
{
	unset($event["index1"]);
}



$ar = array("index0"=>"123", "index1"=>"12332432");

pointer($ar);
print_r($ar); - не удаляет

pointer2($ar); 
print_r($ar); - удален
Возможно ли реализовать работу второго случая в первом, т.е. по средствам функции func_get_args(); принять указатель и успешно его править...

спасибо
 

snark

Новичок
gonza
Гхм... я понимаю, что без нее все работает прекрасно, я привел пример рабочего кода, но мне нужно с этой функцией, так как кол-во параметров может варьироваться
 

gonza

Новичок
видимо изза этог (из мана)
Note: This function returns a copy of the passed arguments only

-~{}~ 05.02.07 20:44:

работай с GLOBALS :D или проведи такой рефакторинг, в результате которого тебе это не надо будет...
Потому как сдается мне этого тебе не надо...

-~{}~ 05.02.07 20:51:

интересно... Ты правил свое сообщение, я видел его слегка другим, при этом никаких сообщений о правке форум не дает... Почему?
 

snark

Новичок
Как раз таки мне это и надо, безусловно другиме варианты рещшения есть, но к сожалению, которые уже нарушат целостность и красотищу рабочего кода, все эти лишние IF и другие условия, напрягают... ) ну да ладно...

А с $_GLOBALS это ты клаассно придумал... ахаха.. ) старый добрый return думаю выручит... )
 

hermit_refined

Отшельник
snark
если вы опишите вашу проблему (а не этот подозрительный пример) - наверняка хорошее решение найдётся.
 

snark

Новичок
hermit_refined
я поражен! Что может быть проще приведенного примера? Боюсь, что действительно этой функцией не добъешся взятия ссылок, так как она делает копии... думаю буду передавать функциям массив типа func(array($param1, $param2, &$param3)); если сработает, конечно... )
 

snark

Новичок
hermit_refined
Есть функция event($event) вызываемая при определеном событии, где $event является ID события, но также могут в нее передаваться еще служебные переменные и при определенных событиях (допустим при реагировании на попытку не привилегированного чтения данных) менять эти переменные.

Например, пользователь захотел изменить некйи ряд в таблице. Вызывается функция event(EV_DATAUPDATE, $idt, $row); где $row ассоциативный массив даных, где ключ является полем в структуре таблицы и значением соотвественно, которая в последствии передается функции для генерирования соответствующего UPDATE MySQL-запроса.

А этому пользователю, допустим нельзя изменять некоторые поля, вот я и хотел в функции event проверять возможность этого действия для пользователя и удалять запрещенные поля в этом массиве. func_get_args() не позволяет этого сделать... ((
 

hermit_refined

Отшельник
поскольку используемый интерфейс напрямую зависит от конкретного события, и следовательно - при вызове вам это событие известно (не при исполнении, а раньше - на этапе компиляции, или, если угодно - написания кода), более правильным и удобным будет завести на каждую группу событий по отдельной функции.

(переменное кол-во аргументов имеет смысл только в функциях подобных printf, для обработки плейсхолдеров, etc.)

P.S. а ещё лучше - ООП ;-)
 

snark

Новичок
hermit_refined, полностью соглашусь пожалуй.
Есть у меня мания все усложнять!

Спасибо!
 
Сверху