2013-06-05 3 views
2

데이터베이스에서 검색 한 레코드에 사용자 정의 함수를 적용하려고합니다. 실행될 함수가 양식에 동적으로 전달됩니다. 어떻게 수행 할 수 있습니까?Execute 함수가 동적으로 양식에 전달됨

Eg ; 
$function = 'convert_number_to_words'; 

foreach ($query->result() as $row) 
    echo '<td>'.$row->num.'</td>';  

함수 convert_number_to_words는 로우 - $로 excuted한다> NUM parameter.How 이것이 상기 에코 명세서에서 달성 될 수있다. (익명 인수를 전달해야하는 경우)

foreach ($query->result() as $row){ 
    echo '<td>'. call_user_func($func, $row->num) .'</td>'; 
} 

또는를 : 반사 사용하는 것입니다

foreach ($query->result() as $row){ 
    echo '<td>'. call_user_func_array($func, array($row->num)) .'</td>'; 
} 

또 다른 솔루션을 :

+0

, 사용자는 나는 그가 말 그대로 그 함수 이름을 사용하지하라는 생각이 아니라 동적 하나 .. –

답변

1

당신은 사용할 수 있습니다

$func = new ReflectionFunction('yourfunc'); 
$func->invokeArgs(array($row->num)); 

하지만 은 정말로이어야합니다. 아무도 임의의 재미를 수행 할 수 없도록해야합니다.

$function_name = "convert_number_to_words"; 
foreach ($query->result() as $row) { 
    echo '<td>' . call_user_func($function_name, $row->num) . '</td>'; 
} 

함수를 정의해야 함을 명심 또는 오류가 발생합니다 : 서버

+0

을 변경할 수 있습니다 나는 지금 본다. 많은 의견을 주셔서 감사합니다! – edwardmp

+0

확인 함수 이름 – hek2mgl

+0

'call_user_func_array()'는 가변 개수의 인자를 가질 수있는 함수 또는'func_get_args()'와 같은 함수와 함께 유용합니다. 이 경우 모든 인수를 알 수 있으므로'call_user_func()'만으로 충분합니다. – Halcyon

1

에 ctions 당신은 call_user_func

사용을 사용할 수 있습니다.

또한 사용자 입력을 신뢰하지 말고 지정된 기능을 확인하십시오. 예를 들어 화이트리스트로이를 수행 할 수 있습니다.

+0

좋은 해결책입니다! – edwardmp

+0

하지만 $ function_name이 empty.i.e가 될 때가 있습니다. 실행해야 할 함수가 없습니다. 변수가 empty.But이 아닌지 확인할 수 있습니다. 더 좋은 방법이 있습니까? – user2280352

+0

물론 그 방법이 있습니다. – Halcyon

0

그것은 또한 작동합니다

는, 폼 데이터를 안전하게 나쁜 생각이 아니다
$function = 'convert_number_to_words'; 

foreach ($query->result() as $row) 
    echo '<td>'.$function($row->num).'</td>'; 
관련 문제