我不相信你可以按照原樣通過,但這並不意味着它無法實現。您可以編寫一個小函數,將輸入解析爲可用於調用所需函數的值。這樣
<?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
)任何檢查。你需要改變它來使用你自己的班級設置和功能。
最新錯誤? –
用echo $ drObj嘗試 - > {$ function};' – devpro
這看起來棒極了!它允許任何人使用該對象的任何參數執行任意方法!例如析構函數! – arkascha