方法一(原方法):
eval("\$uc_controls['user'] = new usercontrol();");
方法二:
call_user_func(array('usercontrol', 'usercontrol()'), $uc_controls['user']);//usercontrol类usercontrol()函数修改
function usercontrol(){
//+++begin
if(func_num_args() > 0){
$arg_list = func_get_args();
$arg_list[0] = $this;
}
//+++end
$this->base();
$this->load('user');
}
uc_client//用eval出错(官网有人说是服务器配置问题),另想方法
大家看下我这方法行得通吗?

解决方案 »

  1.   

    call_user_func(array('usercontrol', 'usercontrol'), $uc_controls['user']); //多写了个括号
      

  2.   

    上面弄错了,应该是下面这样:方法一(原方法): 
    eval("\$uc_controls['user'] = new usercontrol();"); 
    方法二: 
    call_user_func(array('usercontrol', 'usercontrol'), $uc_controls['user']); //usercontrol类usercontrol()函数修改 
    function usercontrol(&$obj){ 
    //+++begin 
    if(func_num_args() > 0){ 
    $obj = $this; 

    //+++end 
    $this->base(); 
    $this->load('user'); 

    uc_client//用eval出错(官网有人说是服务器配置问题),另想方法 
    大家看下我这方法行得通吗?
      

  3.   

    eval也是php的函数,为啥要用eval这个函数呢.直接写不是更好.对于方法一.对于方法2
     第一个数组,第一个索引值为类名,第二个类的方法.
     第二个参数,是传给函数的参数值,可以为数组.
      

  4.   


    function uc_api_mysql($model, $action, $args=array()) {
    global $uc_controls;
    if(empty($uc_controls[$model])) {
    include_once UC_ROOT.'./lib/db.class.php';
    include_once UC_ROOT.'./model/base.php';
    include_once UC_ROOT."./control/$model.php";
    eval("\$uc_controls['$model'] = new {$model}control();");
    }
    if($action{0} != '_') {
    $args = uc_addslashes($args, 1, TRUE);
    $action = 'on'.$action;
    return $uc_controls[$model]->$action($args);
    } else {
    return '';
    }
    }
    所以要用eval
      

  5.   

    eval("\$uc_controls['$model'] = new {$model}control();");
    改成这样看看行不:
    $cls = $mode."control";
    $uc_controls['$model'] = new $cls();
      

  6.   

    搞出来了,应该这样:方法一(原方法):
    eval("\$uc_controls['user'] = new usercontrol();");
    方法二:
    call_user_func(array('usercontrol', 'userobject'), &$uc_controls['user']);//usercontrol类增加函数
    function userobject($obj){
    $obj = new usercontrol();
    }