Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Передача аргумента в метод из массива
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Передача аргумента в метод из массива

Страниц (2): [1] 2 »
 

1. etoYA - 28 Марта, 2012 - 01:05:27 - перейти к сообщению
Как передать аргумент в метод из массива и при это избежать нотицы?

PHP:
скопировать код в буфер обмена
  1. $controller->$method($params[2], $params[3], $params[4]);


3мя ифами?
2. OrmaJever - 28 Марта, 2012 - 01:17:00 - перейти к сообщению
А какая разница масив или 3 отдельных переменых?
3. etoYA - 28 Марта, 2012 - 01:30:20 - перейти к сообщению
OrmaJever, если я передам массив, к примеру так: array_slice($request, -2);

Каким образом его принимать в методе?

Сайт построен так: site.com/controller/method/param 1/param2/param3
4. OrmaJever - 28 Марта, 2012 - 01:33:13 - перейти к сообщению
Зачем передавать тогда индексы? Передайте весь масив одним параметром (лучше по ссылке) и затем в самом методе уже думать что с ним делать, там можно и подсчитать количество елементов и узнать ключи и пройтись циклом.
5. etoYA - 28 Марта, 2012 - 01:35:57 - перейти к сообщению
OrmaJever, в том то и дело, вызов аргументов aka параметров..



и получается /controller/method/arg/arg1/arg2
6. OrmaJever - 28 Марта, 2012 - 01:44:14 - перейти к сообщению
etoYA пишет:
вызов аргументов aka параметров..

Что такое aka?
Я тут подумал наперёд и решил может нада вот эта функция? funct_get_args()

Вот мне как простому человеку не понять в чём собствено проблема, а если мне непонять то скорее всего вы что то делаете не так.
7. etoYA - 28 Марта, 2012 - 01:45:48 - перейти к сообщению
OrmaJever, скорей всего.

aka - also know as
8. DeepVarvar - 30 Марта, 2012 - 06:55:16 - перейти к сообщению
etoYA пишет:
/controller/method/arg/arg1/arg2
Откуда ты будешь знать что у тебя для этого контроллера 3 аргумента, да еще и в том самом порядке?
/controller/method/arg1/arg2/arg
Что будет?
Чтоб такого не было и чтоб знать что будет, сделай вот так:
/controller/method/?v1=arg1&v2=arg2&v=arg
или точно определяй порядок появления параметров.
OrmaJever пишет:
funct_get_args()
А есть уверенность что полученным аргументам будут присвоены верные "порядковые" индексы?
9. etoYA - 30 Марта, 2012 - 11:45:51 - перейти к сообщению
DeepVarvar, порядок точен. И другого просто быть не может.

PHP:
скопировать код в буфер обмена
  1. $request = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
  2. $controller = !empty($request[0]) ? ucfirst(strtolower($request[0])) . 'Controller' : 'IndexController';
  3. $method = !empty($request[1]) ? strtolower($request[1]) : 'base';


DeepVarvar пишет:
Откуда ты будешь знать что у тебя для этого контроллера 3 аргумента, да еще и в том самом порядке?


Для метода Улыбка. У меня и 3х не будет, 3 это на всякий случай)). Решил не парить мозг и
PHP:
скопировать код в буфер обмена
  1. $controller->$method(@$request[2], @$request[3], @$request[4]);


Или лучше все же попарить?)
10. Okula - 30 Марта, 2012 - 12:06:08 - перейти к сообщению
etoYA пишет:
$controller->$method(@$request[2], @$request[3], @$request[4]);

Плохо ты решил. Тебе были предложены более разумные варианты решения проблемы.
11. DeepVarvar - 30 Марта, 2012 - 12:06:18 - перейти к сообщению
Лучше попарить ))
etoYA пишет:
порядок точен. И другого просто быть не может
А если я впишу руками в урлу не твой точный порядок?
12. etoYA - 30 Марта, 2012 - 12:09:37 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. throw new ErrorController('404 error);


Или скорей даже 'Материал не найден'
13. EuGen - 30 Марта, 2012 - 12:13:27 - перейти к сообщению
PHP 5.4 предоставляет весьма изящный способ передачи параметров, основанный на короткой записи массивов (по сути это - настоящие именованные параметры):
PHP:
скопировать код в буфер обмена
  1. function test()
  2. {
  3.    $rgParams=func_get_args()[0];
  4.    var_dump($rgParams);
  5. }
  6.  
  7. test(['foo'=>37, 'bar'=>'value7352', 'baz'=>true]);
  8. test(['bar'=>'value7352', 'foo'=>37, 'baz'=>true]);

Разумеется, при этом Вам придется именовать параметры и при передаче в контроллер. Если уже так важна "человекопонятность", то делайте так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /controller/method/paramName0/paramValue0/paramName1/paramValue1/...
14. Okula - 30 Марта, 2012 - 12:54:22 - перейти к сообщению
EuGen, вот только найти хостинг с PHP 5.4 в данный момент не удасться, если только у тебя не свой сервер который ты собрал вручную.
15. EuGen - 30 Марта, 2012 - 13:02:41 - перейти к сообщению
Okula
Все же я придерживаюсь мнения, что то новое, что появляется - нужно использовать. Жизнь не стоит на месте, и вместе с развитием технологий должны развиваться и программисты.
Найти хостинг с php 5.4 - все же возможно. А если проект на стадии разработки - то создать себе локальное окружение нужной версии - проблем не составляет.

 

Powered by ExBB FM 1.0 RC1