You don't have to write a new function, <?php call_user_func_array(array($obj, $method_name), $params); ?> works pretty fine! (to my mind, 'eval' fucntion should be avoided almost all the time)
call_user_method_array
(PHP 4 >= 4.0.5, PHP 5)
call_user_method_array — Değiştirge dizisi belirtilen bir kullanıcı yöntemini çağırır [önerilmiyor]
Açıklama
Uyarı
PHP 4.1.0'dan beri call_user_method_array() işlevinin kullanımı önerilmemektedir.
Örnekler
Örnek 1 - call_user_method_array() yerine call_user_func_array() kullanın
<?php
call_user_func_array(array($nesne, $yöntem), $değiştirgeler);
call_user_func_array(array(&$nesne, $yöntem), $değiştirgeler); // PHP 4
?>
Ayrıca Bakınız
- call_user_func_array() - Değiştirgelerin bir dizi olarak verildiği kullanıcı işlevini çağırır
- call_user_func() - İlk değiştirgede belirtilen kullanıcı işlevini çağırır
wloche at hotmail dot com ¶
2 years ago
brudinie at googlemail dot com ¶
4 years ago
<?php
/**
* @param string $func - method name
* @param object $obj - object to call method on
* @param boolean|array $params - array of parameters
*/
function call_object_method_array($func, $obj, $params=false){
if (!method_exists($obj,$func)){
// object doesn't have function, return null
return (null);
}
// no params so just return function
if (!$params){
return ($obj->$func());
}
// build eval string to execute function with parameters
$pstr='';
$p=0;
foreach ($params as $param){
$pstr.=$p>0 ? ', ' : '';
$pstr.='$params['.$p.']';
$p++;
}
$evalstr='$retval=$obj->'.$func.'('.$pstr.');';
$evalok=eval($evalstr);
// if eval worked ok, return value returned by function
if ($evalok){
return ($retval);
} else {
return (null);
}
return (null);
}
?>
leonwinter at gmail dot com ¶
6 years ago
If you this function will be deleted in future php releases you can use this function:
<?
function _call_user_method_array($name, $obj, $params) {
// get params
$txt = "";
foreach($params as $nr => $el) {
$txt.='$params['.$nr."], ";
}
$txt = substr($txt, 0, strlen($txt)-2);
// run it
return eval('return call_user_method($name, $obj, '.$txt.');');
}
?>
Hope this helps somebody.
