Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передача в функцию нескольких параметров, записанных строкой.
 
 автор: neudor   (18.09.2007 в 09:15)   письмо автору
 
 

Есть класс ядра.
Интересует функция exec_handler. Она вызывает метод $func класса $handler, с параметрами $params.
class kernel {

    function kernel() {
        return $this;
    }
    
    function exec_handler($handler, $func, $params) {
        global $$handler;
        
        return $$handler->$func($params);
    }
}

Так вот, проблема в этих самых $params.
Как мне передать в функцию $func несколько параметров (неизвестное количество)?

Я даже не знаю уже что и думать. пробовал с exec() - не выходит. $$params передаёт переменную с именем, записанным в $params, которая, естесственно, не существует.

Пробовал передавать exec_handler($handler, $func, array $params).

Вобщем, интересует решение проблемы, но чтобы в $func передавалось именно несколько параметров, а не, например, массив.

   
 
 автор: bronenos   (18.09.2007 в 09:24)   письмо автору
 
   для: neudor   (18.09.2007 в 09:15)
 

может я и тугодум, но мне непонятно, приведите если можно пример параметров, а насчет массива - array($params)

   
 
 автор: neudor   (18.09.2007 в 09:30)   письмо автору
 
   для: bronenos   (18.09.2007 в 09:24)
 

Короче где-то может быть вызвано
$kernel->exec_handler('templater', 'convert', array($str1, $str2) )


и это должно привести к вызову
$templater->convert($str1, $str2)


Если что-то ещё непонятно - пишите.

   
 
 автор: bronenos   (18.09.2007 в 09:56)   письмо автору
 
   для: neudor   (18.09.2007 в 09:30)
 

class kernel { 

    function kernel() { 
        return $this; 
    } 
     
    function exec_handler($handler, $func, $params) { 
        global $$handler; 
        $param = array();
        foreach ($params as $p) $param[] = '"'.$p.'"';
        $param = join(", ", $param);
        eval('return $'.$handler.'->'.$func.'('.$param.');');
    } 
}


лучше не могу вспомнить как

   
 
 автор: neudor   (18.09.2007 в 10:02)   письмо автору
 
   для: bronenos   (18.09.2007 в 09:56)
 

ну вроде должно работать. Вечером дома попробую.

А без "eval" никак не обойтись?

   
 
 автор: kasmanaft   (18.09.2007 в 15:46)   письмо автору
 
   для: neudor   (18.09.2007 в 09:15)
 

Вот, может быть пригодится.. Там уж додумаете, как использовать.


<?php
function func() 
{
  
$args func_get_args();
  return 
implode(' '$args);
}
echo 
func('text''test''text');
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования