- 任何用户都可以查看别的用户的信息,当然不能看到别人的密码。
- 任何用户都可以修改自己的密码。
于是我们对第一章的类做些改动,首先我们在userInfo类中,将获得密码的方法隐藏。
我们再写一个UserChange类继承自userInfo,在UserChange中增加修改密码的方法。并将获取密码的方法重写为public权限。
这样,在你的页面中,就可以创建两种user。一种是只能看到信息不能看到密码、不能修改密码的userInfo的实例。另外一种是比userInfo功能更强的UserChange类,这个实例可以修改密码,可以获得密码。
在合适的位置创建不同的user,就是你的业务逻辑的内容了。
同时,我们独立出一个数据库连接类,数据库连接类比较完善的网上有很多,大家学习完毕面向对象后,自己也可以写出更完善的数据库类。
数据库配置类 db_config.php
3 | $db_server = "localhost" ; |
Mysql连接类
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); |
14 | public function query( $sql ){ |
15 | $this ->result = mysql_query( $sql , $this ->conn); |
19 | public function next(){ |
20 | return $row = mysql_fetch_array( $this ->result); |
24 | public function close(){ |
25 | mysql_free_result( $this ->result); |
28 | public function escapeString( $str ){ |
29 | return mysql_escape_string( $str ); |
父类User类
03 | require_once ( "class_mysqlConn.php" ); |
08 | protected $userGrade ; |
12 | public function __construct( $name ){ |
13 | $this ->mysqlConn = new MysqlConn(); |
14 | $sql = "select * from e_user where username='$name' " ; |
15 | $rs = $this ->mysqlConn->query( $sql ); |
16 | $this ->userInfo = $this ->mysqlConn->next(); |
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" ]; |
28 | public function getUserName(){ |
29 | return $this ->userName; |
32 | protected function getUserPSW(){ |
33 | return $this ->userPSW; |
36 | public function getUserAge(){ |
37 | return $this ->userAge; |
40 | public function getUserGrade(){ |
41 | return $this ->userGrade; |
子类 class_userChange.php 类
添加了修改密码的方法,重写并公开了获取密码的方法。
03 | require_once ( "class_user.php" ); |
05 | class UserChange extends UserInfo { |
06 | public function setUserPSW( $pws ){ |
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'" ; |
12 | $rs = $this ->mysqlConn->query( $sql ); |
14 | $this ->userPSW = $pws ; |
19 | public function getUserPSW(){ |
20 | return $this ->userPSW; |
在任何位置都可以放心使用userInfo类。
02 | require_once ( "class_user.php" ); |
04 | $user = new UserInfo( "Tom" ); |
06 | $username = $user ->getUserName(); |
07 | $userage = $user ->getUserAge(); |
08 | $usergrade = $user ->getUserGrade(); |
10 | echo "$username name is " . $username . "<br>" ; |
11 | echo "$username age is " . $userage . "<br>" ; |
12 | echo "$username grade is " . $usergrade . "<br>" ; |
可以重设密码的Userchange类的实例。
04 | require_once ( "class_userChange.php" ); |
06 | $user = new UserChange( "Jack" ); |
08 | $username = $user ->getUserName(); |
09 | $userpsw = $user ->getUserPSW(); |
10 | $userage = $user ->getUserAge(); |
11 | $usergrade = $user ->getUserGrade(); |
14 | echo "your name is " . $username . "<br>" ; |
15 | echo "your password is " . $userpsw . "<br>" ; |
16 | echo "your age is " . $userage . "<br>" ; |
17 | echo "your grade is " . $usergrade . "<br>" ; |
19 | if ( $user ->setUserPSW( $password )){ |
20 | echo "you password be changed to " . $userpsw = $user ->getUserPSW(); |