Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> call_user_func 
:(
    Опции темы
kilogram
Дата 3.4.2012, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 19.3.2012

Репутация: -1
Всего: 0



Вот попробовал использовать эту функцию
Код

<html><body>
<?php
function privet($a,$b){
echo $a,' ',$b;
}
call_user_func('privet',5,8);
?>
</body></html>


тоже самое можно написать и так без неё,даже короче выходит:
Код

<html><body>
<?php
function privet($a,$b){
echo $a,' ',$b;
}
privet(5,8);
?>
</body></html>

Зачем тогда она?
PM MAIL   Вверх
Sentox
Дата 3.4.2012, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Например при запросах в виде команд (очень примтивно):
http://host/?action=actionExample&param=1
Код

$action = ($_REQUEST['action']) ? $_REQUEST['action'] : 'defaultAction';
$param = ($_REQUEST['param']) ? $_REQUEST['param'] : array();
call_user_func($action, $param);


Используется когда вызов может быть создан через параметр.
PM MAIL   Вверх
Fortop
Дата 4.4.2012, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Sentox @  3.4.2012,  20:30 Найти цитируемый пост)
Например при запросах в виде команд (очень примтивно):

А вот не надо так делать.

А если уж даете такой пример, то сразу дайте пример правильного использования, чтобы не создавать дыру необъятных размеров в своем продукте.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Sentox
Дата 4.4.2012, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Цитата(Fortop @ 4.4.2012,  01:05)
Цитата(Sentox @  3.4.2012,  20:30 Найти цитируемый пост)
Например при запросах в виде команд (очень примтивно):

А вот не надо так делать.

А если уж даете такой пример, то сразу дайте пример правильного использования, чтобы не создавать дыру необъятных размеров в своем продукте.

Смотрим и внимательно читаем (потому как я знаю что здесь на форуме достаточно грамотные програмисты не на курсах попова научены и я не давал никаких контекстов применения (чистый пример мануал))
Цитата

(очень примтивно)


smile кстати, а почему Вы считаете что экшеном не может быть сама функция фильтр пользовательских данных. 

Это сообщение отредактировал(а) Sentox - 4.4.2012, 13:20
PM MAIL   Вверх
ElGuapo
Дата 4.4.2012, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 1.7.2006

Репутация: нет
Всего: 3



Sentox, Fortop совершенно прав. Пример ваш крайне опасный и не стоило его новичку предлагать. Зря вы возмущаетесь, совсем не очевидно, что у всех читателей ваш уровень знаний. Может, и на указанных курсах учились, а может и вообще нигде. Будьте снисходительны. 

А call_user_func можно и в более безопасных целях применить, например для альтернативного вызова одной из функций без конструкций типа switch и elseif. 
PM MAIL   Вверх
Fortop
Дата 5.4.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Sentox @  4.4.2012,  12:35 Найти цитируемый пост)
 кстати, а почему Вы считаете что экшеном не может быть сама функция фильтр пользовательских данных. 

Фильтр вполне может быть экшеном. Но вы же не запрещаете пользователю вызвать любую другую функцию. А ведь он может сделать это поправив руками урл.

В действительно простейшем и примитивном случае вы у себя в коде должны описать список доступных для выполнения методов.
И получив данные проверять всегда:
Код

$allowedMethods  = array('print','show','edit','somethingElse');
if (in_array($_REQUEST['action'], $allowedMethods)) {
// И только тут мы можем использовать call_user_func()
// потому что мы контролируем какие функции разрешено вызывать пользователю.
} else {
//А тут может быть вызвано что угодно, поэтому никаких call_user_func()
}




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.