激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 自制PHP框架之模型與數據庫

自制PHP框架之模型與數據庫

2021-05-17 17:04編程老頭 PHP教程

本文給大家分享的是自制PHP框架的第二部分內容,包括模型和數據庫的使用,這里通過具體的實例給大家展示了出來,希望大家能夠喜歡

什么是模型

我們的web系統一定會和各種數據打交道,實際開發過程中,往往一個類對應了關系數據庫的一張或多張數據表,這里就會出現兩個問題。

1.類和數據表,一方修改會導致另一方的修改,只要數據表結構不定下來,業務邏輯的開發幾乎沒法開工

2.獲取數據時會牽涉很多sql語句的拼接,如果數據結構變動,這些sql需要改寫

假如要開發一個博客系統,我們先設計兩個model和兩張數據表

第一張數據表,表名是post,存儲了博客文章,數據如下:

自制PHP框架之模型與數據庫

第二章數據表,表名是comment,存儲了博客文章的評論,數據如下:

自制PHP框架之模型與數據庫

post和comment是一對多的關系,每一篇博客文章對應了多條評論,每一條評論只屬于一篇文章。

model類的設計之前,我們先定義好三個接口

?
1
2
3
4
5
interface imodel{
    public static function all();
    public static function get($id);
    public static function where($condition,$value);
}

定義model類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class model implements imodel{
    public static $table;
    
    public static $db;
    public function __construct(){
        self::$db=new mysql();
    }
    
    public static function get($id){
        return self::where('id',$id);
    }
    
    public static function where($condition,$value){
        $sql=sprintf("select * from %s where %s='%s'",self::$table,$condition,$value);
        return self::$db->query($sql);
    }
 
    public static function all(){
        $sql=sprintf("select * from %s",self::$table);
        return self::$db->query($sql);
    }
}

這三個接口分別負責了三種查詢:遍歷查詢,條件查詢,按編號查詢,其實這三種接口的設計并不是最科學的,甚至get方法不過是where的一種特殊形式,但是這樣的設計并不影響我們工程,甚至也有助于理解,我們后期會對這段代碼做改動。

之所以在model類里就完成了sql的拼接,就是希望在子類中不必重復再寫sql。

然后是post類的定義

?
1
2
3
4
5
6
7
class postmodel extends model{ 
    public $postid;
    public function __construct(){
        parent::__construct();
        parent::$table='post';
    }
}

還有comment類的定義

?
1
2
3
4
5
6
7
class commentmodel extends model{
    public $commentid;
    public function __construct(){
        parent::__construct();
        parent::$table='comment';
    }
}

我們可以在控制器的方法中寫這樣的代碼來完成調用數據

?
1
2
3
4
5
6
7
8
$post=new postmodel();
$post::all();
$arr=$post::get('1');
var_dump($arr);
 
$comment=new commentmodel();
$arr=$comment::get('2');
var_dump($arr);

我們發現,這樣的代碼很簡潔,但是問題也隨之而來,我們sql查詢時候,還有很多復雜的聯表查詢如join操作,如此,拼接sql還是不可避免的,這個復雜的問題,我們放在后面解決。

模型與數據庫

先寫一個db抽象類,規定類需要實現的方法

?
1
2
3
4
5
6
7
8
9
10
11
abstract class db{
    
    private $ip;
    private $user;
    private $pwd;
    private $name;
    private $connection;
    
    abstract public function execute($sql);
    abstract public function query($sql);
}

這里以mysql數據為例,當然你也完全可以實現一套sqlite數據庫的接口。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class mysql extends db{
 
    public function mysql(){
        
        /*config*/
        $this->ip='*';
        $this->serverid='*';
        $this->serverpassword='*';
        $this->databasename='*';
        /*end of config*/
        
        $this->connection=mysqli_connect($this->ip,$this->serverid,$this->serverpassword,$this->databasename);
        
        if(!$this->connection){
            die('could not connect'.$this->connection);
        }
        
        mysqli_query($this->connection,'set names utf8');
    }
 
    public function execute($sql){
        return mysqli_query($this->connection,$sql);
    }
 
    public function query($sql){
        $result=mysqli_query($this->connection,$sql);
        $arr=array();
        while($row=mysqli_fetch_array($result)){
            $arr[]=$row;
        }
        return $arr;
    }
    public function close(){
        mysqli_close($this->connection);
    }
}

談到數據庫類,上述的寫法仍不是最好的,因為我們可以使用單例模式來保證db類只有一次初始化,來節省硬件資源的開銷,但這不是本節的主題,我們把設計模式放在之后來談。 

原文鏈接:http://www.cnblogs.com/sweng/p/6624845.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品国产成人国产三级 | 九九热在线视频观看这里只有精品 | 欧美日韩经典在线 | 国产毛片在线看 | 国产高清一区 | 斗破苍穹在线观看免费完整观看 | 一级黄色大片在线观看 | 成人在线国产 | 麻豆视频在线观看免费网站 | 久久草在线观看视频 | 黄色片网站在线免费观看 | www视频免费在线观看 | 91系列在线观看 | 色就色 综合偷拍区91网 | 亚洲第一视频 | 精品国产乱码久久久久久丨区2区 | 亚洲视频综合 | 曰韩在线视频 | 香蕉黄色网 | 黄色成人av在线 | 制服丝袜成人动漫 | 日韩美香港a一级毛片免费 久久精品视频1 | 国产精品久久久久久238 | 国产小视频一区 | 羞羞视频2023| 久久精品视频国产 | 欧美日韩在线中文字幕 | 黄色片网站在线播放 | 成人在线免费观看网址 | 久草影音| 一级成人欧美一区在线观看 | 亚州综合网 | 久久宗合色 | 日韩一级片毛片 | 欧美黄色免费视频 | 日本在线看片 | 成人激情久久 | 成人乱码一区二区三区不卡视频 | 国产91久久久 | 欧美激情 在线播放 | 久久亚洲成人 |