Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2016, 11:07   #1
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию Передача массива параметров в метод

Доброго времени суток.
Попытался прикрутить пагинацию, но что-то не понимаю в чем ошибка.
Код:
http://vs.local/series?page=0
Роутер:
PHP код:
        parse_str(parse_url($urlPHP_URL_QUERY), $parameters);
        
print_r($parameters); 
получаю параметры(если есть).
Array ( [page] => 0 ) (есть)

PHP код:
$actionName 'action'.ucfirst(array_shift($segments));

                if ((
$parameters) != NULL)
                {
                    
$segments $parameters;
                    
print_r($segments);
                } 
И если есть, то записываю
Array ( [page] => 0 )

и передаю
PHP код:
call_user_func_array(
                        array(
$controllerObject$actionName),
                        
$segments); 
И получаю в контроллере:
PHP код:
    public function actionView($real = array())
    {
        
var_dump($real);

        
$page 0;
        
        if (isset(
$real['page']))
        {
            
$page intval($real['page']);
            echo 
'Successful!';
        }
        
print_r($page); 
А точнее сказать НЕ получаю
На выходе вардамп:
string(1) "0"
Принт
0
($page = 0)

Я не понимаю, в чем моя ошибка? И перепроверял и консультировался с http://php.net/ - не получается!

Последний раз редактировалось Artsiom; 10.10.2016 в 11:58.
Artsiom вне форума Ответить с цитированием
Старый 10.10.2016, 12:00   #2
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Перепроверил всё.
Передал series?page=0&re=45
Получил в методе string(1) "0", хотя должен был Array ( [page] => 0 [re] => 45 )
Artsiom вне форума Ответить с цитированием
Старый 10.10.2016, 12:01   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

а в каком месте у вас actionView то вызывается? и как параметр туда передается?
ADSoft вне форума Ответить с цитированием
Старый 10.10.2016, 12:22   #4
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Вызывается:
PHP код:
$controllerFile ROOT.'/controllers/'.$controllerName.'.php';
                if (
file_exists($controllerFile))
                {
                    include_once (
$controllerFile);
                }
        
                
//Создать объект, вызвать метод
                
$controllerObject = new $controllerName;
                
$result call_user_func_array(
                        array(
$controllerObject$actionName),
                        
$segments); 
Передаётся $segments
Который или
Код:
$actionName = 'action'.ucfirst(array_shift($segments));
дефолтно
или проверяются параметры
Код:
parse_str(parse_url($url, PHP_URL_QUERY), $parameters);
PHP код:
                if (($parameters) != NULL)
                {
                    
$segments $parameters;
                    
print_r($segments);
                } 
и заполняется $segments

Сам метод в вызываемом контроллере
PHP код:
    public function actionView($real = array())
    {
        
var_dump($real);
        
        
$getList = array();
        
        
$select 'id_series, number_series, specification, input_date, shelf_number';
        
$from 'series';
        
$orderby 'id_series';
        
$limit 0;
        
$name_item_menu 'series';
        
$page 0;
        
        if (isset(
$real['page']))
        {
            
$page intval($real['page']);
            echo 
'Successful!';
        }
        
        
//print_r($page);
        
        
$menuList Tools::pager($name_item_menu$from$limit$page);
        
        
$getList Tools::getList($select$from$orderby$limit$page);
        
        return include 
ROOT.'/views/series.php';
    } 
var_dump($real) пишет
string(1) "0"
Artsiom вне форума Ответить с цитированием
Старый 10.10.2016, 13:13   #5
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Код:
htp://vs.local/series?page=5&rt=56&dgd=4657
PHP код:
$numargs func_num_args();
    echo 
"Количество аргументов: $numargs\n";

        
$arg_list func_get_args();
    for (
$i 0$i $numargs$i++) {
        echo 
"Аргумент №$i: " $arg_list[$i] . "\n";
    } 
Количество аргументов: 3
Аргумент №0: 5
Аргумент №1: 56
Аргумент №2: 4657

Понятно, передаётся нумерованный массив в качестве аргумента.
А можно передать в метод ассоциативный как ни будь?

Последний раз редактировалось Artsiom; 10.10.2016 в 13:15.
Artsiom вне форума Ответить с цитированием
Старый 10.10.2016, 14:29   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Artsiom Посмотреть сообщение
А можно передать в метод ассоциативный как ни будь?
Да без проблем:
PHP код:
class foo {
    function 
bar($real = array()) {
        if(
is_array($real))
            
print_r($real);
        else
            echo 
'Invalid argument type! It must be array!';
    }
}

$foo = new foo;
$arr = array(
    
'key1' => 'val1',
    
'key2' => 'val2',
    
'key3' => 'val3',
);
call_user_func_array(array($foo"bar"), array($arr)); 
Результат:
Array ( [key1] => val1 [key2] => val2 [key3] => val3 )
Andkorol вне форума Ответить с цитированием
Старый 10.10.2016, 16:50   #7
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
PHP код:
call_user_func_array(array($foo"bar"), array($arr)); 
Аааа, спасибо!
Только не понятно.
$arr - уже инициализирован как массив и массив ассоциативный. Почему он не передавался "как есть" и нужны заморочки вида array($arr)?
Artsiom вне форума Ответить с цитированием
Старый 10.10.2016, 17:50   #8
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

$arr - уже инициализирован как массив и массив ассоциативный. Почему он не передавался "как есть" и нужны заморочки вида array($arr)?
Artsiom вне форума Ответить с цитированием
Старый 10.10.2016, 20:30   #9
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Сообщение от Artsiom Посмотреть сообщение
$arr - уже инициализирован как массив и массив ассоциативный. Почему он не передавался "как есть" и нужны заморочки вида array($arr)?
Потому что этого требует функция call_user_func_array. Функция требует, чтобы вторым аргументом передавался массив аргументов для вызываемой функции. Поэтому чтобы передать один объект в качестве аргумента (в вашем случае этот аргумент - массив), нужно положить в ещё один массив.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметра Kolosok Помощь студентам 0 06.12.2014 21:26
Передача параметра! vprsc JavaScript, Ajax 9 27.12.2012 17:14
Передача в Оракл параметра с Like d_adilet БД в Delphi 4 10.07.2012 10:45
передача параметра маГГ85 PHP 4 18.01.2012 11:35
передача параметра по ссылке veter_s_morya PHP 7 18.10.2009 16:43