Переменное количество аргументов функции

G
На сайте с 24.10.2009
Offline
51
1473

Добрый день.

Можно ли как-то сделать автоматическое подставление разного количества аргументов в функцию?

Объясню, что я имел ввиду.

Например в массиве GET передается 3 параметра ['1', '2', '3']

У меня в системе например есть метод класса, например для отображения какой-то страницы.

Этот метод запускается автоматически и в него должны передаться все три параметра как отдельные аргументы метода. То есть

public function viewPage($first, $second, $third)

{ ... }

Но вот если параметров только два в массиве GET, то это должно выглядеть вот так

public function viewPage($first, $second)

{ ... }

или даже, если захочу, то так

public function viewPage($apple, $melon)

{ ... }

Как можно это реализовать? Спасибо.

[Удален]
#1

Массив передавайте, вида ключ-значение


// Вызов функции
viewPage(array('first' => 'Значение', 'second' => 'Значение', 'third' => 'Значение'))

// Сама функция
public function viewPage($args){
foreach ($args as $index => $value) $$index = $value;

// Теперь внутри функции есть переменные $first, $second и $third
}
G
На сайте с 24.10.2009
Offline
51
#2
Alexander S:
Массив передавайте, вида ключ-значение



// Вызов функции
viewPage(array('first' => 'Значение', 'second' => 'Значение', 'third' => 'Значение'))

// Сама функция
public function viewPage($args){
foreach ($args as $index => $value) $$index = $value;

// Теперь внутри функции есть переменные $first, $second и $third
}

Так проблема-то как раз в том, что этот способ не подходит, как передача в виде одного параметра хранящего массив. Надо именно, чтобы каждый ключ был параметром.

---------- Добавлено 20.07.2012 в 15:43 ----------

То есть поясню подробнее.

Система сама смотрит, сколько аргументов в массиве GET и автоматически запускает метод с нужным количеством параметров.

Например передалось 2 дополнительных параметра (http://example.com/pages/viewPage/37/2).

Класс pages, метод viewPage и два дополнительных параметра.

Тогда он создает объект класса скажем Pages и запускает его метод viewPage и подставляет аргументы:


$pages->viewPages($arg1, $arg2); //2 аргумента ($arg1 = 37 и $arg2 = 2)

А я уже, когда пишу сам метод, могу назвать входные параметры как угодною Я знаю заранее, что придет в этот метод 2 аргумента. Знаю, например, что первый - это ID а второй страница.

И пишу метод так:


public function viewPages($id, $page)
{
... //А тут пользуюсь этими параметрами как хочу.
}
pikasso
На сайте с 27.01.2008
Offline
150
#3

Gaaarfild, Вы хоть сами поняли что написали? Alexander S Вам правильно подсказал, другой вариант это добавить в метод максимальное количество дефолтных параметров, которые можно использовать, а можно нет. Иначе никак.

G
На сайте с 24.10.2009
Offline
51
#4

pikasso

А как же тогда это реализовано в FW CodeIgniter?

Значит можно?

Только не отправляйте меня копать CI.

LEOnidUKG
На сайте с 25.11.2006
Offline
1769
#5
А как же тогда это реализовано в FW CodeIgniter?

Эм, наверное так: http://php.net/manual/ru/function.create-function.php

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
pikasso
На сайте с 27.01.2008
Offline
150
#6

С CodeIgniter близко не знаком, однако это два единственных варианта. Или Вы неправильно сформировали задачу, или сами просто не поимаете что хотите от скрипта.

G
На сайте с 24.10.2009
Offline
51
#7

pikasso

Перечитайте внимательнее мой второй пост. Я его отредактировал еще.

[Удален]
#8

Вот еще есть такое - func_get_args

G
На сайте с 24.10.2009
Offline
51
#9

Alexander S

Есть. Но это уже портит принцип, который мне бы хотелось соблюсти.

LEOnidUKG
На сайте с 25.11.2006
Offline
1769
#10
Alexander S:
Вот еще есть такое - func_get_args

Ух тыж, прикольная функция :)

Конечно не знаю куда применить, но идейка не плохая такая.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий