Вопрос наверно звучит запутано, но на деле все проще:
есть форма для фильтра типа:
<form action method="post">
<input name="func1" value="1" type="radio"/>
<input name="func1" value="2" type="radio"/>
<input name="func2[]" value="1" type="checkbox"/>
<input name="func2[]" value="2" type="checkbox"/>
<input type="submit" value="Ok"/>
</form>
(чисто для примера)
запрос с этой формы передается методу некоего класса, который производит фильтрацию некоего массива, в зависимости от того, что пользователь на выбирал в форме, как так:
<?
class Filter{
//Основной метод вызываемый извне
static public function getFilteredArray($array, $filters){
foreach($filters as $key1 => $filter){
if(method_exists($this, $key1)){
$tmp = array();
foreach($array as $key2 => $value){
if($this->$key1($value, $filter)) $temp_arr += [$key2 => $value];
}
$array = $tmp;
}
}
}
private function func1($item, $filter){
//обрабатываем и возвращаем true или false
}
private function func2($item, $filter){
//обрабатываем и возвращаем true или false
}
}
Соответственно на странице, на которую попадаем после нажатия Ок будет примерно это:
<?
$filter = $_POST;
$filterArray = Filter::getFilteredArray($array, $filter); //$array это некий массив который необходимо отфильтровать
Собственно, вопрос не в том будет работать или нет, так как уже работает (здесь в примере возможно есть ошибки, так как писал по памяти), а вопрос в том безопасно ли использовать такой подход (использование параметры из POST запроса в виде имен методов вызываемых динамически. На данный момент в классе есть метод который проверяет все данные в POST через htmlspecialchars (в примере ее нету), достаточно ли такой проверки?