2016-10-17 3 views
0

Можно ли повторить функцию класса? Я пробовал это, но я получаю ошибку;Как выполнить функцию класса echo?

<input type="text" name="query"> 
ex. empid('1'); 

    <?php 
    include 'class/class.sample.php'; 
    $sampleObj = new sample(); 
    $function = $_POST['query']; //ex empid('1'); 
    echo $drObj->$function; 
    ?> 
+1

Какая ошибка? –

+0

попробуйте с 'echo $ drObj -> {$ function};' – devpro

+0

Это выглядит великолепно! Он позволяет любому исполнять произвольные методы с любыми аргументами на этом объекте! Например, деструктор! – arkascha

ответ

0

Я не верю, что вы можете передать это так же, как есть, но это не значит, что этого не может быть достигнуто. Вы можете написать небольшую функцию, которая будет анализировать ввод в значения, которые вы можете использовать для вызова нужной функции. Что-то вроде этого

<?php 
// I've commented your include because it doesn't benefit this example 
//include 'class/class.sample.php'; 
$sampleObj = new sample(); 
//$function = $_POST['query']; //ex empid('1'); 

// set input hardcoded for the benefit of this example 
$output = fetchFunction("empid('1','2','3')"); 
call_user_func_array(array($sampleObj, $output['function']), $output['parameters']); 

/** 
* Use this function to parse input like "empid('1','2')" 
* to array('function'=>'empid',parameters=>array(1,2)) 
* This can be used in a call_user_func_array 
* 
* @param $input 
* @return array 
*/ 
function fetchFunction($input){ 
    // match inside() to get the parameters 
    preg_match('/(?<=\()(.+)(?=\))/is', $input, $parameters); 

    return array(
     'parameters' => explode(',', str_replace(array('\'','"'),'',$parameters[0])), 
     'function' => substr($input,0,strpos($input,'(')) 
    ); 
} 


class sample{ 
    public function empid($id){ 
     print_r(func_get_args()); 
    } 
} 

Я добавил фиктивный класс, чтобы показать выход, и не включал проверку существующих функций для экземпляра (возможно что-то вроде method_exists). Вам нужно будет изменить это, чтобы работать со своей собственной настройкой и функциями класса.

Смежные вопросы