美文网首页
PHP使用OOP注册登录

PHP使用OOP注册登录

作者: 请叫我老曹 | 来源:发表于2018-01-31 21:59 被阅读0次

一、页面关系结构图

  • Index.php是入口主文件,根据自己的情况需要,载入start.inc.php(初始页面)、register.inc.php(注册页面)、login.inc.php(登录页面)、member.inc.php(个人中心页面)。
templte.png

1、index.php

# 类的自动加载
<?php
function __autoload($_classname) {
    require $_classname.".class.php";
}
if (isset($_GET["index"])) {
    $_main = new Main($_GET["index"]);
} else {
    $_main = new Main();
}
$_main ->_run();
?>

2、start.inc.php

<h2>欢迎光临注册登录</h2>
<div class="start">
    <a href="index.php?index=login">登录</a>
    <a href="index.php?index=register">注册</a>
</div>
index.png

3、register.inc.php

<h2>欢迎注册</h2>
<div class="register">
    <form method="post" action="">
        <p>用 户 名:<input type="text" name="username"></p>
        <p>密  码 :<input type="password" name="password"></p>
        <p>密码确认:<input type="password" name="notpassword"></p>
        <p>电子邮件:<input type="text" name="email"></p>
        <p><input type="submit" name="send" value="注册"></p>
        <p>[<a href="?">返回上一层]</a></p>
    </form>
</div>
register.png

4、login.inc.php

<h2>欢迎登录</h2>
<div class="login">
    <form method="post" action="">
        <p>用户名:<input type="text" name="username"></p>
        <p>密 码:<input type="password" name="password"></p>
        <p><input type="submit" name="send" value="登录"></p>
        <p>[<a href="?">返回上一层]</a></p>
    </form>
</div>
login.png

5、mumber.inc.php

<h2>欢迎回来</h2>
<div class="member">
    <p>欢迎回来,[<?php if (isset($_COOKIE["user"])) echo $_COOKIE["user"]?>]</p>
    <p>[<a href="?">返回首页</a>]</p>
</div>
member.png

二、业务关系结构图

  • 在业务逻辑上,Main.class.php作为主入口调用各个模块处理的功能,比如:User.class.php(登录注册处理父类)、Register.class.php(注册类)、Login.class.php(登录类)、Tool.class.php(工具类)。
templte1.png

1、Main.class.php

//主类,控制页面载入,处理数据
class Main
{
    private $_index;
    private $_send;
    //构造方法,用来初始化数据
    public function __construct($_index="")
    {
        $this->_index = $_index;
        if (isset($_POST["send"])) {
            $this->_send = $_POST["send"];
        }
    }
    //总管
    public function _run() {
        //调用注册登录方法
        $this->_send();
        //载入界面
        include $this->_ui();
    }

    //创建一个载入界面的方法
    //这个方法,我想得到login.inc.php这个字符串
    private function _ui()
    {
        if (empty($this->_index)|| !file_exists($this->_index.".inc.php")) {
            $this->_index = "start";
        }
        return $this->_index.".inc.php";
    }
    //创建一个方法来接收登录和注册发送的操作
    private function _send()
    {
        switch ($this->_send) {
            case "注册":
                $this->_exec(new Register($_POST["username"],$_POST["password"],$_POST["notpassword"],$_POST["email"]));
                break;
            case "登录":
                $this->_exec(new Login($_POST["username"],$_POST["password"]));
                break;
        }
    }

    //创建一个执行的方法,里面传一个参数,是Reg或者Login类的对象引用
    private function _exec($_class)
    {
        if ($_class->_check()) {
            $_class->_query();
        } else {
            Tool::_alertBack("字段不能为空");
        }
    }

2、User.class.php

//这个用户类,规范子类的字段和方法
//这是个抽象类,不可以实例化只能是子类继承
abstract class User
{
    //成员字段
    protected $_username;
    protected $_password;
    protected $_notpassword;
    protected $_email;
    //一个方法,登录和注册
    //如果你点了登录,就执行这个方法登录
    //如果你点了注册,就执行这个方法注册
    abstract function _query();
    //验证
    abstract function _check();
}

3、Register.class.php

class Register extends User
{
    //写一构造方法来接收表单的值
    public function __construct($_userName,$_passWord,$_notPassWord,$_eMail)
    {
        $this->_username = $_userName;
        $this->_password = $_passWord;
        $this->_notpassword = $_notPassWord;
        $this->_email = $_eMail;
    }
    //将信息注册到xml里
    public function _query()
    {
        //xml字符串
        $_xml = <<<_xml
<?xml version="1.0" encoding="utf-8"?>
<user>
    <username>$this->_username</username>
    <password>$this->_password</password>
    <email>$this->_email</email>
</user>
_xml;
        //创建simplexml类
        $_sex = new SimpleXMLElement($_xml);
        //生成xml
        $_sex->asXML("user.xml");
        //跳转到login.inc.php页面
        Tool::_alertLocation("恭喜您,注册成功","?index=login");
    }
    # 注册验证,只是限定不能为空
    public function _check()
    {
        if (empty($this->_username)||
            empty($this->_password)||
            empty($this->_notpassword)||
            empty($this->_email) ){
            return false;
        }
        return true;
    }
}

4、Login.class.php

class Login extends User
{
    public function __construct($_username,$_password)
    {
        $this->_username = $_username;
        $this->_password = $_password;
    }

    //从xml里读出信息
    public function _query()
    {
        //载入xml文件
        $_sex = simplexml_load_file("user.xml");
        if ($this->_username == $_sex->username && $this->_password == $_sex->password) {
           //生成一个cookies
           setcookie("user",$this->_username);
           Tool::_alertLocation($this->_username."欢迎回来","?index=member");
        } else {
           Tool::_alertBack("登录失败");
        }
    }
    # 登录验证,只是验证不能为空
    public function _check()
    {
        if (empty($this->_username) || empty($this->_password)) {
            return false;
        }
        return true;
    }
}

5、Tool.class.php

//辅助工具类,里面存放的都是静态方法,直接调用,无需实例化
class Tool
{
    //弹出一个信息,然后跳转到指定的页面
    static public function _alertLocation($_info,$_url)
    {
        echo "<script>alert('$_info');location.href='$_url';</script>";
        exit();
    }
    //弹窗返回之前
    static public function _alertBack($_info)
    {
        echo "<script>alert('$_info');history.back()</script>";
        exit();
    }
}

总结

本程序使用到了OOP和XML技术来注册、登录。使用到了类和面向对象创建程序的思维和方法。

相关文章

网友评论

      本文标题:PHP使用OOP注册登录

      本文链接:https://www.haomeiwen.com/subject/ktxrzxtx.html