PHP面向对象之旅:用户权限管理类

实现更丰富的用户权限管理功能
服务器君一共花费了223.055 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

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

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

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

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

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

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

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

数据库配置类 db_config.php

<?
// 数据库配置文件, db_config.php
$db_server = "localhost"; 
$db_user = "root";
$db_pwd = "123";
$db_name = "test";
?>

Mysql连接类

<?
class MysqlConn {
	private $conn;
	private $my_db;
	private $result;
	
	public function  __construct() {
		require_once("db_config.php");
		$this->conn = mysql_pconnect($db_server, $db_user, $db_pwd);
		$this->my_db = mysql_select_db($db_name,$this->conn);//选择数据库
		
	}
		
	public function  query($sql){
		$this->result = mysql_query($sql, $this->conn); // 执行查询语句
		return $this->result;
	}
	
	public function next(){
		return $row = mysql_fetch_array($this->result);
		
	}
	
	public function close(){
		mysql_free_result($this->result); 		
	}	
	//使用转义字符,保证系统安全.
	public  function escapeString($str){
		return mysql_escape_string($str); 
	}
}
?>

父类User类

<?
// class_user.php
require_once("class_mysqlConn.php");
class UserInfo{
	protected $userName;  //属性,用户名
	protected $userPSW ;  //属性,用户密码
	protected $userAge ;  //属性,用户年龄
	protected $userGrade ; //属性,用户级别
	protected $userInfo; //存储数据库返回信息的数组变量.
	protected $mysqlConn;
	public function __construct($name){
		$this->mysqlConn = new MysqlConn();
		$sql = "select * from e_user where username='$name' "; //查询的sql
		$rs = $this->mysqlConn->query($sql);
		$this->userInfo = $this->mysqlConn->next();
		$this->getInfo(); //调用传递信息的方法.
	}
	// 获取信息传递给属性的方法
	protected function getInfo(){
		$this->userName = $this->userInfo["username"];
		$this->userPSW = $this->userInfo["userpsw"];
		$this->userAge = $this->userInfo["userage"];
		$this->userGrade = $this->userInfo["usergrade"];
	}
	
	//返回每个属性的public 方法.
	public function getUserName(){
		return $this->userName;
	}
	
	protected function getUserPSW(){
		return $this->userPSW;
	}
	
	public function getUserAge(){
		return $this->userAge;				
	}
	
	public function getUserGrade(){
		return $this->userGrade;
	}
}
?>

子类 class_userChange.php 类

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

<?
// class_userChange.php
require_once("class_user.php");
class UserChange extends UserInfo {
	public function setUserPSW($pws){         
		
        $pws = $this->mysqlConn->escapeString($pws); // 过滤特殊字符
        $username = $this->mysqlConn->escapeString($this->userName);// 过滤
	    $sql = "Update e_user set userpsw ='$pws' ";
	    $sql .= " where username = '$username'"; //查询的sql	   
		$rs = $this->mysqlConn->query($sql); //执行
		if($rs){
			$this->userPSW = $pws;
		}
		return $rs;
	}	
	
	public function getUserPSW(){ //重写的getUserPSW方法。
		return $this->userPSW;
	}
}
?>

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

<? //viewuser.php
require_once("class_user.php");
$user = new UserInfo("Tom"); //创建一个user对象.
$username = $user->getUserName(); //分别调用方法取得数据
$userage = $user->getUserAge();
$usergrade = $user->getUserGrade();
echo "$username name is ".$username."<br>";  //输出数据
echo "$username age is ".$userage."<br>" ;
echo "$username grade is ".$usergrade."<br>" ;
?>

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

<? 
$password = "898"; //重设的密码
require_once("class_userChange.php");
$user = new UserChange("Jack"); //创建一个可以修改密码的user对象.
$username = $user->getUserName(); //分别调用方法取得数据
$userpsw = $user->getUserPSW();
$userage = $user->getUserAge();
$usergrade = $user->getUserGrade();
//这些和user类的一样,用起来很舒服。
echo "your name is ".$username."<br>";  //输出数据
echo "your password is ".$userpsw."<br>" ;
echo "your age is ".$userage."<br>" ;
echo "your grade is ".$usergrade."<br>" ;
//如果设置成功,显示新的密码。
if($user->setUserPSW($password)){
	echo "you password be changed to ".$userpsw = $user->getUserPSW();
	//这里,密码被重设了。
}
?>

延伸阅读

此文章所在专题列表如下:

  1. PHP面向对象之旅:类和对象
  2. PHP面向对象之旅:类的属性
  3. PHP面向对象之旅:类的方法
  4. PHP面向对象之旅:对象的比较
  5. PHP面向对象之旅:构造函数
  6. PHP面向对象之旅:类的继承
  7. PHP面向对象之旅:访问控制
  8. PHP面向对象之旅:方法覆盖
  9. PHP面向对象之旅:this关键字
  10. PHP面向对象之旅:parent::关键字
  11. PHP面向对象之旅:再谈重载
  12. PHP面向对象之旅:获取用户数据
  13. PHP面向对象之旅:用户权限管理类
  14. PHP面向对象之旅:static变量与方法
  15. PHP面向对象之旅:单例模式
  16. PHP面向对象之旅:final类和方法
  17. PHP面向对象之旅:PHP中的常量
  18. PHP面向对象之旅:抽象类
  19. PHP面向对象之旅:抽象方法
  20. PHP面向对象之旅:抽象类继承抽象类
  21. PHP面向对象之旅:静态抽象方法
  22. PHP面向对象之旅:模板模式
  23. PHP面向对象之旅:接口与抽象方法
  24. PHP面向对象之旅:接口的实现
  25. PHP面向对象之旅:接口的继承
  26. PHP面向对象之旅:类型提示
  27. PHP面向对象之旅:PHP的多态
  28. PHP面向对象之旅:instanceof运算符
  29. PHP面向对象之旅:接口与组合模拟多继承
  30. PHP面向对象之旅:一个接口实例
  31. PHP面向对象之旅:简单工厂模式

本文地址:http://www.nowamagic.net/librarys/veda/detail/1094,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1094

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《人月神话》 弗雷德里克·布鲁克斯 (作者), 汪颖 (译者)

《人月神话》原文:The Mythical Man-Month: The Essays on Software Engineering, 2nd ed.在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解。既有很多发人深省的观点,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的项目管理经验。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄中等多种语言,全球销量数百万册。确立了其在行业内的经典地位。

更多计算机宝库...