登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

pcwanli的博客

nx

 
 
 

日志

 
 

PHP 面向对象实例:创建用户类  

2012-04-18 14:12:10|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在上一章,我们写了一个建立用户user类,直接使用user类读取用户信息的类。假设我们又有了新的需求。

  • 任何用户都可以查看别的用户的信息,当然不能看到别人的密码。
  • 任何用户都可以修改自己的密码。

于是我们对第一章的类做些改动,首先我们在userInfo类中,将获得密码的方法隐藏。

我们再写一个UserChange类继承自userInfo,在UserChange中增加修改密码的方法。并将获取密码的方法重写为public权限。

这样,在你的页面中,就可以创建两种user。一种是只能看到信息不能看到密码、不能修改密码的userInfo的实例。另外一种是比userInfo功能更强的UserChange类,这个实例可以修改密码,可以获得密码。

在合适的位置创建不同的user,就是你的业务逻辑的内容了。

同时,我们独立出一个数据库连接类,数据库连接类比较完善的网上有很多,大家学习完毕面向对象后,自己也可以写出更完善的数据库类。

数据库配置类 db_config.php

1<?
2// 数据库配置文件, db_config.php
3$db_server = "localhost";
4$db_user = "root";
5$db_pwd = "123";
6$db_name = "test";
7 
8?>

Mysql连接类

01<?
02class MysqlConn {
03    private $conn;
04    private $my_db;
05    private $result;
06     
07    public function  __construct() {
08        require_once("db_config.php");
09        $this->conn = mysql_pconnect($db_server, $db_user, $db_pwd);
10        $this->my_db = mysql_select_db($db_name,$this->conn);//选择数据库
11         
12    }
13         
14    public function  query($sql){
15        $this->result = mysql_query($sql, $this->conn); // 执行查询语句
16        return $this->result;
17    }
18     
19    public function next(){
20        return $row = mysql_fetch_array($this->result);
21         
22    }
23     
24    public function close(){
25        mysql_free_result($this->result);       
26    }  
27    //使用转义字符,保证系统安全.
28    public  function escapeString($str){
29        return mysql_escape_string($str);
30    }
31}
32?>

父类User类

01<?
02// class_user.php
03require_once("class_mysqlConn.php");
04class UserInfo{
05    protected $userName//属性,用户名
06    protected $userPSW //属性,用户密码
07    protected $userAge //属性,用户年龄
08    protected $userGrade ; //属性,用户级别
09    protected $userInfo; //存储数据库返回信息的数组变量.
10    protected $mysqlConn;
11 
12    public function __construct($name){
13        $this->mysqlConn = new MysqlConn();
14        $sql = "select * from e_user where username='$name' "; //查询的sql
15        $rs = $this->mysqlConn->query($sql);
16        $this->userInfo = $this->mysqlConn->next();
17        $this->getInfo(); //调用传递信息的方法.
18    }
19    // 获取信息传递给属性的方法
20    protected function getInfo(){
21        $this->userName = $this->userInfo["username"];
22        $this->userPSW = $this->userInfo["userpsw"];
23        $this->userAge = $this->userInfo["userage"];
24        $this->userGrade = $this->userInfo["usergrade"];
25    }
26     
27    //返回每个属性的public 方法.
28    public function getUserName(){
29        return $this->userName;
30    }
31     
32    protected function getUserPSW(){
33        return $this->userPSW;
34    }
35     
36    public function getUserAge(){
37        return $this->userAge;              
38    }
39     
40    public function getUserGrade(){
41        return $this->userGrade;
42    }
43}
44?>

子类 class_userChange.php 类

添加了修改密码的方法,重写并公开了获取密码的方法。

01<?
02// class_userChange.php
03require_once("class_user.php");
04 
05class UserChange extends UserInfo {
06    public function setUserPSW($pws){        
07         
08        $pws = $this->mysqlConn->escapeString($pws); // 过滤特殊字符
09        $username = $this->mysqlConn->escapeString($this->userName);// 过滤
10        $sql = "Update e_user set userpsw ='$pws' ";
11        $sql .= " where username = '$username'"; //查询的sql     
12        $rs = $this->mysqlConn->query($sql); //执行
13        if($rs){
14            $this->userPSW = $pws;
15        }
16        return $rs;
17    }  
18     
19    public function getUserPSW(){ //重写的getUserPSW方法。
20        return $this->userPSW;
21    }
22}
23?>

在任何位置都可以放心使用userInfo类。

01<? //viewuser.php
02require_once("class_user.php");
03 
04$user = new UserInfo("Tom"); //创建一个user对象.
05 
06$username = $user->getUserName(); //分别调用方法取得数据
07$userage = $user->getUserAge();
08$usergrade = $user->getUserGrade();
09 
10echo "$username name is ".$username."<br>"//输出数据
11echo "$username age is ".$userage."<br>" ;
12echo "$username grade is ".$usergrade."<br>" ;
13 
14?>

可以重设密码的Userchange类的实例。

01<?
02$password = "898"; //重设的密码
03 
04require_once("class_userChange.php");
05 
06$user = new UserChange("Jack"); //创建一个可以修改密码的user对象.
07 
08$username = $user->getUserName(); //分别调用方法取得数据
09$userpsw = $user->getUserPSW();
10$userage = $user->getUserAge();
11$usergrade = $user->getUserGrade();
12//这些和user类的一样,用起来很舒服。
13 
14echo "your name is ".$username."<br>"//输出数据
15echo "your password is ".$userpsw."<br>" ;
16echo "your age is ".$userage."<br>" ;
17echo "your grade is ".$usergrade."<br>" ;
18//如果设置成功,显示新的密码。
19if($user->setUserPSW($password)){
20    echo "you password be changed to ".$userpsw = $user->getUserPSW();
21    //这里,密码被重设了。
22}
23 
24?>

来源:http://www.nowamagic.net/php/php_CreateClassUser2.php
  评论这张
 
阅读(903)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018