Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
1

Неявный вызов ф-ции

23.07.2013, 17:04. Показов 1223. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем
Тута реализовую MVC модель, и при вызове экшена, мне туда нада передать аргументы,

Есть класс контролера:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
class SiteController {
 
    function MainAction()
    {
 
    }
 
    function MyAction($id)
    {
 
    }
 
}
При разборе урла site/my/id/4, я забираю id/4 и ложу в массив вроде этого.
PHP
1
array("id" => 4)
Перед вызовом экшена я с помощю рефлекшена проверяю имена аргументов у ф-ции равны ли они именам аргументов с урла, и если тру то буду вызывать экшен.
Знаю решение вызова с помощю call_user_func_array но прийдёт только один аргумент array в функцию, и который нужен будет пропустить через extract для работы как с обычными переменными, call_user_func нада вручную записывать переменные в ф-цию, но так как кол-во переменных N-ое, не подходит, может как нибудь с помощю eval?или не? Извеняюсь за ошибки, и может что не так изложил, то говорите.
Буду благодарен за подсказки, надеюсь суть вопроса понятна.
ps: наверное тему нужно было в ОПП, если что не так то перенесите плс.

Добавлено через 3 часа 25 минут
Получается можна только через евал?
В переменную $in формирую строку "43,2,4"
PHP
1
eval("\$controller -> \$act(".$in.");");
Но безопасность же )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2013, 17:04
Ответы с готовыми решениями:

Неявный вызов оператора
Дано комплексное число Его действительную и мнимую часть объявить в private конструктор и...

Неявный вызов ToString()
прислали Если Материал окажется пустым, у Вас будет ошибка. Её можно избежать, используя неявный...

Неявный вызов конструктора копирования
Здравствуйте, как можно неявно вызвать конструктор копирования 3 способами? Я только 1 найти смог....

Неявный вызов конструктора шаблонного класса при операции сравнения
Реализовал шаблонный класс целых чисел, для использования его в шаблонном классе дробей. Звучит...

4
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.07.2013, 17:19 2
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Знаю решение вызова с помощю call_user_func_array но прийдёт только один аргумент array в функцию, и который нужен будет пропустить через extract для работы как с обычными переменными, call_user_func нада вручную записывать переменные в ф-цию, но так как кол-во переменных N-ое, не подходит, может как нибудь с помощю eval?или не? Извеняюсь за ошибки, и может что не так изложил, то говорите.
ниасилил..
PHP
1
call_user_func_array( array($object, $action), $arguments );
Добавлено через 1 минуту
P.S. $object и $action - строки, $arguments - массив

Добавлено через 1 минуту
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Перед вызовом экшена я с помощю рефлекшена проверяю имена аргументов у ф-ции равны ли они именам аргументов с урла, и если тру то буду вызывать экшен
ну так, на крайняк, у ReflectionMethod же есть тоже invokeArgs
1
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
23.07.2013, 17:37  [ТС] 3
Цитата Сообщение от KOPOJI Посмотреть сообщение
ниасилил..
PHP
1
call_user_func_array( array($object, $action), $arguments );
Да много буков наверное было, проблема проще чем написано )
Ну да, просто тогда в фунцкию прийдёт только один массив, и чтобы работать в теле ф-ции как с обычной переменной нада роспечатать массив вот код.
PHP
1
2
3
4
function action($array)
{
 extract($array);
}
А у меня ф-ция вот, и как её можна вызвать и передать туда програмно аргументы.

PHP
1
2
3
4
function action($id, $name)
{
 
}
Вышло только пока через eval (
PHP
1
eval("\$controller -> \$act(".$in.");");
Ну можна не явно
PHP
1
2
3
 
 
eval("call_user_func(array(\$controller,\$action), ".$in" );");
Надеюсь щас вышло более подробно)

Добавлено через 2 минуты
ах да дочитал про Инвоке ))) Снимаю шляпу то что нада походу )))
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.07.2013, 17:49 4
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
ах да дочитал про Инвоке
а вы пробовали запускать код, который я писал?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Foo
{
    public function bar($foo, $bar, $lol)
    {
         var_dump($foo, $bar, $lol);
    }
}
 
$object = new Foo();
$action = 'bar';
$arguments = array('foo', 'bar', 'id'=>'lol');
call_user_func_array( array($object, $action), $arguments ); //string(3) "foo" string(3) "bar" string(3) "lol"
1
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
23.07.2013, 17:54  [ТС] 5
Цитата Сообщение от KOPOJI Посмотреть сообщение
а вы пробовали запускать код, который я писал?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Foo
{
    public function bar($foo, $bar, $lol)
    {
         var_dump($foo, $bar, $lol);
    }
}
 
$object = new Foo();
$action = 'bar';
$arguments = array('foo', 'bar', 'id'=>'lol');
call_user_func_array( array($object, $action), $arguments ); //string(3) "foo" string(3) "bar" string(3) "lol"
Да походу нада быть повнимательней, походу перепутал из недавней ситуацией когда нада была ф-цию с N-ым кол-вом аргументов, я забирал аргументы с помощю func_get_args(), и потом екстракт ) И так работает как у вас спасибо
Ну ничё пол дня безценной експы на php )))
0
23.07.2013, 17:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2013, 17:54
Помогаю со студенческими работами здесь

Вызов ф-ции php из js
Добрый день, уже кучу раз обсуждали эту тему, но не как не могу сделать вызов моей ф-ции php через...

Передача ф-ции в клас и вызов ее по ссылке?
Класс Auto_Menu сохраняєт у себя ссылку на другой обьект Auto_Menu, но мне б хотелось чтоб он мог...

Неявный метод Рунге-Кутты или неявный метод Эйлера(1-го порядка)
Помогите примерами для курсовой на тему Неявный метод Рунге-Кутты

Передача ф-ции как параметра другой ф-ции
struct pupil{ char surname; int school; int answer; int num; } tmp, a; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru