用面向对象思想开发一个留言本-添加部分

使用面向对象开发的二个主要优点

1. 可读性高。

2. 让代码更具模块化,方便维护和二次开发。

今天要来开发的是一个面向对象的留言本, 如果是面向过程, 连上数据库, 检测提交事件,检测变量, 增删改查就可以了, 因为我们要采用面向对象思想开发,所以就不能这么干,那下面来捋一下,用面向对象思想该怎么去开发。
在开发之前,我们要先整理出一个大概的结构,留言本是一个对象, 它有个大脑,存储着数据库的配置信息, 同时大脑里记忆着增删改查方法,我们可以使用对象->方法的形式从记忆中获取并实现真实的增删改查过程, 这个就叫面向对象。举个简单的例子就是, 人是一个对象, 人有头, 手,脚属性, 可以使用人对象->手方法拿起食物 ->脚方法走到食物前 ->头正对准食物方向。 现在心中大概的模型有了, 就要去进行需求分析, 因为我们知道, 它是一个留言本,所以就可以进行以下的分析 (分析场景是结合php+mysql的基础之上)

1. 它需要实现哪些功能?

可以通过前台表单提交, 后台php检测提交事件获取信息后把信息进行增删改查。

2. 它有哪些变量?

如果只有提交人姓名和内容, 就是一个name一个content, 如果加上获取时间就再多一个publictime.

3. 数据库都需要哪些字段?

因为不可能留言就一条, 所以我们需要一个自增索引id, 提交人姓名需要一个name, 提交内容需要一个content, 提交时间需要一个publictime, 所以, 至少需要4个字段。

4. 需要哪些文件?

db.class.php , add.php,edit.php,del.php,index.php

5. 它都需要用到什么函数/方法?

需要在实例化对象的时候传入一个数据库名字, 相当于先给大脑指定一个信息存储位置, 因为__construct实例化对象的时候会被自动加载, 所以这个时候要用到该方法,传入数据库名后,需要先进行连接数据库,所以这个时候需要使用mysql_connect函数,连接数据库, 要判断连接是否成功, 所以这个时候需要用到mysql_error或者mysql_errno函数, 连接上数据库后, 要选择传入的数据库, 所以这个时候就要用到mysql_select_db函数, 选中数据库后, 需要设置一个编码, 所以这个时候就要用到mysql_query函数, 数据插入的时候, 需要判断是否插入成功, 这个时候就要用到mysql_affected_rows函数, 取出的时候, 因为不可能是一条, 所以就要用到mysql_fetch_row一条一条取出…

好的, 现在简单的需求分析完了, 我们就可以进行代码编写了, 依据面向对象思想, 我们先来实现大脑。(db.class.php)

<?php

/*

 File:db.class.php

 Date:2015/12/22


*/

class db
{
    private $db_host = 'localhost';
    private $db_username = 'root';
    private $db_password = '123456';

    function __construct($tableName)
    {
        header('Content-Type:text/html;charset=utf8');
        $db_host = $this->db_host;
        $db_username = $this->db_username;
        $db_password = $this->db_password;

        $link = mysql_connect($db_host,$db_username,$db_password) or die('mysql connect error!'.mysql_errno());
        mysql_select_db($tableName,$link) or die('select database:'.$tableName.'error!'.mysql_errno());
        mysql_query('set names utf8');
    }

    public function insert($table,$data)
    {
        $insert = "INSERT INTO $table(name,content,publictime) VALUES ('{$data['name']}','{$data['publictime']}','{$data['content']}')";
        $result = mysql_query($insert);
        if($result && mysql_affected_rows()>0)
        {
              echo 'insert information success!';
        }
    }

    public function del($id)
    {

    }

    public function update($id,$data)
    {

    }
    public function select($id,$data)
    {
        $result = "SELECT * FROM message";
        return $result;

    }


}



?>

然后是调用函数部分, 采用调用函数是为了优化服务器资源的, 提高程序的执行效率。 (function.php)

<?php

function __autoload($className)
{
    $file = $className.'.class.php';
    if(is_file($file))
    {
        include $file;
    }
}

?>

再然后是添加主程序部分 (add.php)

<?php

require 'function.php';

if($_POST)
{
    $db = new db('text');
    $_POST['publictime'] = time();
    $db->insert('message',$_POST);

}

?>

添加前台html表单部分 (add.html)

<html>
<head>
<title>Message Add</title>
<meta charset="gbk">
<style type="text/css">
    body
    {
        background:blue;
        font-size:15px;color:red;font-weight:bold;
        text-align:center;
       
    }
    #main
    {  
        width:400px;
        height:400px;
        position:absolute;
        top:50%;
        left:50%;
        margin-top:-200px;
        margin-left:-200px;
    }
</style>
</head>
     <body>
      <form action="add.php" method="post">
           <div id="main">
               <div>姓名:<input type="text" name="name"></div><br>
               <div>内容:<textarea name="content" rows="15" cols="35"></textarea></div><br>
               <input type="submit" value="提交">
           </div>
     </form>
    </body>
</html>

说一下程序的执行流程
首先 , require了一个function.php , 该文件里是一个__autoload魔术方法, 如果实例化的类不存在就会把类名作为参数传入, 然后包含文件, 起到资源优化和包含sql config的作用, 再然后, 如果点击了提交 , 就会触发post事件, 触发post事件后, 就从db类中实例化一个对象同时传入一个text作为数据库名, 因为包含的function.php里不存在该类名同时db.class.php里又使用了构造方法 __construct,所以这个时候, db就会被作为参数传入, 然后包含文件, 这个时候 , db类就存于了当前空间, 于是这个时候就触发了构造方法, 选中了数据库, 连接这些, 然后使用time函数获取一下当前时间存入变量,最后使用对象->方法, 向指定的表名写入内容。

此条目发表在php分类目录,贴了, , 标签。将固定链接加入收藏夹。