一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 秋霞黄色网 | 亚洲国产在线观看免费视频 | 成人动漫在线免费看 | 天天天做天天天天爱天天想 | 鬼吹灯之天星术免费观看 | 国产一区在线播放 | 国产图片综合区 | 日韩精品中文字幕视频一区 | 午夜神器老司机高清无码 | 99爱在线观看 | 黑人video粗暴日本 | 国产福利视频一区二区微拍视频 | yy6080午夜国产免费福利 | 青青青草免费 | 午夜精品区 | 精品一区二区三区视频日产 | 国色天香社区在线视频免费观看 | 国产精品成人免费 | japanese日本护士 | 精品国产福利片在线观看 | 小仙夜晚慰自催眠mp3护士篇 | 99r在线播放 | 成人亚洲欧美日韩在线观看 | 免费观看视频在线 | 干美女视频 | 日本不卡高清免费v日本 | 日本一区二区不卡久久入口 | 天天操天天干天天舔 | 日女人免费视频 | 韩国三级年轻的小婊孑 | 免费特黄一区二区三区视频一 | 91在线亚洲精品一区 | 久久婷婷五月综合色丁香花 | 天天久久影视色香综合网 | 爽新片xxxxxxx | 国产精品久久久久久久久99热 | 国产午夜免费 | 亚洲欧美乱 | 日本动漫黄网站在线观看 | 国产成人 免费观看 | 色先锋 影音先锋a 资源站 |