请教一个技术问题,我在根目录下的model目录下的user.php文件自己写了一个方法get_user_id_by_username($username),那么请问我想在根目录avatar.php文件内使用这个方法,应该怎样正确的使用呢?我写的代码如下:
$uid= $_ENV['user']->get_user_id_by_username($username);
程序似乎没有正常的运行,估计是错误了。请问我该怎么引用呢? 

解决方案 »

  1.   

    $_ENV['user']= new user()试试意思就是要实例化类,存进变量
    然后调用
      

  2.   

    有时要在类里调用别的实例化类,且双方均保存状态,可用&
      

  3.   

    没有context,不知道怎么帮……
      

  4.   


    <?php/*
    [UCenter] (C)2001-2009 Comsenz Inc.
    This is NOT a freeware, use is subject to license terms $Id: user.php 879 2008-12-15 03:28:36Z zhaoxiongfei $
    */!defined('IN_UC') && exit('Access Denied');class usermodel { var $db;
    var $base; function __construct(&$base) {
    $this->usermodel($base);
    } function usermodel(&$base) {
    $this->base = $base;
    $this->db = $base->db;
    } function get_user_by_uid($uid) {
    $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
    return $arr;
    } function get_user_by_username($username) {
    $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
    return $arr;
    }
            //这里是我添加的方法
    function get_user_id_by_username($username){
    $uid = $this->db->result_first("SELECT uid FROM uchome_space WHERE username='$username'");
    return $uid;
    } function check_username($username) {
    $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
    $len = strlen($username);
    if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {
    return FALSE;
    } else {
    return TRUE;
    }
    } function check_mergeuser($username) {
    $data = $this->db->result_first("SELECT count(*) FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->base->app['appid']."' AND username='$username'");
    return $data;
    } function check_usernamecensor($username) {
    $_CACHE['badwords'] = $this->base->cache('badwords');
    $censorusername = $this->base->get_setting('censorusername');
    $censorusername = $censorusername['censorusername'];
    $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($censorusername = trim($censorusername)), '/')).')$/i';
    $usernamereplaced = isset($_CACHE['badwords']['findpattern']) && !empty($_CACHE['badwords']['findpattern']) ? @preg_replace($_CACHE['badwords']['findpattern'], $_CACHE['badwords']['replace'], $username) : $username;
    if(($usernamereplaced != $username) || ($censorusername && preg_match($censorexp, $username))) {
    return FALSE;
    } else {
    return TRUE;
    }
    } function delete_user($uidsarr) {
    $uidsarr = (array)$uidsarr;
    $uids = $this->base->implode($uidsarr);
    $arr = $this->db->fetch_all("SELECT uid FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid IN ($uids)");
    $puids = array();
    foreach((array)$arr as $member) {
    $puids[] = $member['uid'];
    }
    $uids = $this->base->implode(array_diff($uidsarr, $puids));
    if($uids) {
    $this->db->query("DELETE FROM ".UC_DBTABLEPRE."members WHERE uid IN($uids)");
    $this->db->query("DELETE FROM ".UC_DBTABLEPRE."memberfields WHERE uid IN($uids)");
    $this->delete_useravatar($uidsarr);
    $this->base->load('note');
    $_ENV['note']->add('deleteuser', "ids=$uids");
    return $this->db->affected_rows();
    } else {
    return 0;
    }
    } function delete_useravatar($uidsarr) {
    $uidsarr = (array)$uidsarr;
    foreach((array)$uidsarr as $uid) {
    file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big', 'real')) && unlink($avatar_file);
    file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle', 'real')) && unlink($avatar_file);
    file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small', 'real')) && unlink($avatar_file);
    file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'big')) && unlink($avatar_file);
    file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'middle')) && unlink($avatar_file);
    file_exists($avatar_file = UC_DATADIR.'./avatar/'.$this->base->get_avatar($uid, 'small')) && unlink($avatar_file);
    }
    }

    function get_total_num($sqladd = '') {
    $data = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."members $sqladd");
    return $data;
    } function get_list($page, $ppp, $totalnum, $sqladd) {
    $start = $this->base->page_get_start($page, $ppp, $totalnum);
    $data = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."members $sqladd LIMIT $start, $ppp");
    return $data;
    } function name2id($usernamesarr) {
    $usernamesarr = daddslashes($usernamesarr, 1, TRUE);
    $usernames = $this->base->implode($usernamesarr);
    $query = $this->db->query("SELECT uid FROM ".UC_DBTABLEPRE."members WHERE username IN($usernames)");
    $arr = array();
    while($user = $this->db->fetch_array($query)) {
    $arr[] = $user['uid'];
    }
    return $arr;
    } function quescrypt($questionid, $answer) {
    return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';
    }}?>
      

  5.   


    <?php/*
    [UCenter] (C)2001-2009 Comsenz Inc.
    This is NOT a freeware, use is subject to license terms $Id: avatar.php 910 2008-12-30 03:51:44Z monkey $
    */
    error_reporting(0);
    define('IN_UC', TRUE);
    define('UC_ROOT', substr(__FILE__, 0, -9));
    define('UC_API', strtolower((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
    define('UC_DATADIR', UC_ROOT.'data/');
    define('UC_DATAURL', UC_API.'/data');
    define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
    define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));$uid = isset($_GET['uid']) ? $_GET['uid'] : 0;
    $username = isset($_GET['username'])? $_GET['username'] : '';
    $size = isset($_GET['size']) ? $_GET['size'] : '';
    $random = isset($_GET['random']) ? $_GET['random'] : '';
    $type = isset($_GET['type']) ? $_GET['type'] : '';
    $check = isset($_GET['check_file_exists']) ? $_GET['check_file_exists'] : '';
    if (!empty($uid)) {
    $avatar = './data/avatar/'.get_avatar($uid, $size, $type);
    }else {
    $avatar = './data/avatar/'.get_avatars($username, $size, $type);
    }
    if(file_exists(dirname(__FILE__).'/'.$avatar)) {
    if($check) {
    echo 1;
    exit;
    }
    $random = !empty($random) ? rand(1000, 9999) : '';
    $avatar_url = empty($random) ? $avatar : $avatar.'?random='.$random;
    } else {
    if($check) {
    echo 0;
    exit;
    }
    $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
    $avatar_url = 'images/noavatar_'.$size.'.gif';
    }if(empty($random)) {
    header("HTTP/1.1 301 Moved Permanently");
    header("Last-Modified:".date('r'));
    header("Expires: ".date('r', time() + 86400));
    }header('Location: '.UC_API.'/'.$avatar_url);
    exit;//下面是调用的方法
    function get_avatars($username, $size = 'middle', $type = '') {
    $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
    require UC_ROOT.'model/user.php';
    //include_once('model/user.php');
    $users = new usermodel();
    //$uid= $this->$users->get_user_id_by_username($username);
    $uid = 1;
    $uid = abs(intval($uid));
    $uid = sprintf("%09d", $uid);
    $dir1 = substr($uid, 0, 3);
    $dir2 = substr($uid, 3, 2);
    $dir3 = substr($uid, 5, 2);
    $typeadd = $type == 'real' ? '_real' : '';
    return $dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).$typeadd."_avatar_$size.jpg";
    }?>
      

  6.   

    //下面是调用的方法
    function get_avatars($username, $size = 'middle', $type = '') {
        $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
        //下面是引用方法的代码
        require UC_ROOT.'model/user.php';
        //include_once('model/user.php');
        $users = new usermodel();
        //$uid= $this->$users->get_user_id_by_username($username);
        $uid = 1;
        $uid = abs(intval($uid));
        $uid = sprintf("%09d", $uid);
        $dir1 = substr($uid, 0, 3);
        $dir2 = substr($uid, 3, 2);
        $dir3 = substr($uid, 5, 2);
        $typeadd = $type == 'real' ? '_real' : '';
        return $dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).$typeadd."_avatar_$size.jpg";
    }
      

  7.   

    不知uchome是自已的框架还是用的别的?
      

  8.   

    没接触过uchome。有点疑问
    $users = new usermodel(); //既然实例化了
    //$uid= $this->$users->get_user_id_by_username($username); //$this->$users是为何?
    $users->get_user_id_by_username($username);//这样调用不行?
      

  9.   

    不好用是因为你
    require UC_ROOT.'model/user.php'
    这句没引用到类文件呢,还是有什么错误?
    而且usermode类里的构造函数也是必须有参数的,你似乎实例化的时候没传进来。!defined('IN_UC') && exit('Access Denied');class usermodel {    var $db;
        var $base;    function __construct(&$base) {//$base参数,包含一个db的实例化对象
            $this->usermodel($base);
        }    function usermodel(&$base) {//$base参数,包含一个db的实例化对象
            $this->base = $base;
            $this->db = $base->db;
        }
    ...
      

  10.   

    $users = new usermodel($base); //既然实例化了,这里必须传一个$base参数,至于$base是什么样的一个对象,只能lz自己去看看了
    //$uid= $this->$users->get_user_id_by_username($username); //$this->$users是为何?
    $users->get_user_id_by_username($username);//这样调用不行?
      

  11.   

    &$base引用的可能是基本类
    你找下,或在调用usermodel 的网页里输出一下看看&base是什么,在什么时候传入的
      

  12.   

    根据名字来看,估计是uchome定义的基类,class base{..}这样的东西,你应该去看看api文档,或者找找usermodel里的其它方法是怎么调用的。
      

  13.   

    &$base,它这个是引用的基类,应该也是已实例化的你看一下别的程序段引用user类时传的是什么进去的
      

  14.   

    $user = $_ENV['user']->get_user_by_uid($fromuid);
      

  15.   

    $user = $_ENV['user']->get_user_by_uid($fromuid);在哪个页
      

  16.   

    看了一下首先,它的控制器类和模型类均是继承自model下的base类且base,有load方法,加载模型类,下面是base类中的方法/**
     * 加载相应的 Model, 存入 $_ENV 超级全局变量
     *
     * @param string $model 模块名称
     * @param 该模块相对的基类 $base 默认为该基类
     * @return 此处不需要返回
     */
    function load($model, $base = NULL) {
    $base = $base ? $base : $this;
    if(empty($_ENV[$model])) {
    require_once UC_ROOT."./model/$model.php";
    eval('$_ENV[$model] = new '.$model.'model($base);');
    }
    return $_ENV[$model];
    }
    问题在于,能否在其他地方调用:个人看法是调用问题多: 
    首先,在框架中,一般的模型类方法只能控制器中调用,如果你在控制器中写方法,是可以的,因为均继承自base
    你可以在控制器中如:user.php加载 ,$this->load('user');就可以用它的方法了 ,一般为$this->uer->get_user_id_by_username($username);第二个:在根目录文件中能否调用,个人觉得在uchome调用可能不行?因为它不是控制器中!
       控制器在uc_client中controller中如果强制调用,要么引用base类,要么改模型类中的$base 参数,可行度不大第三个,可以看看UChome是如何利用控制器的,按照它的方法用!