日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

PHP核心之MVC设计模式

發(fā)布時(shí)間:2023/12/19 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 PHP核心之MVC设计模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MVC設(shè)計(jì)模式

MVC概述

MVC介紹

MVC是一個(gè)編程思想,是一種設(shè)計(jì)模式
思想:將一個(gè)功能分解成3個(gè)部分

Model(模型):處理與數(shù)據(jù)有關(guān)的邏輯
View(視圖):顯示頁(yè)面
Controller(控制器):處理業(yè)務(wù)邏輯

控制器用來(lái)接收請(qǐng)求
以后不能直接請(qǐng)求模型和視圖

MVC演化

顯示商品

# index.php
<?php
//自動(dòng)加載類
spl_autoload_register(function($class_name){
	require "./{$class_name}.class.php";
});
//連接數(shù)據(jù)庫(kù)
$param=array(
	'user'	=>	'root',
    'pwd'	=>	'',
    'dbname' => 'data'
);
$mypdo= MyPDO::getInstance($param);
//獲取商品數(shù)據(jù)
$list=$mypdo->fetchAll('select * from products');
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> <th>名稱</th> <th>價(jià)格</th> <th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>

演化一:分離視圖

# index.php
<?php
//自動(dòng)加載類
spl_autoload_register(function($class_name){
	require "./{$class_name}.class.php";
});
//連接數(shù)據(jù)庫(kù)
$param=array(
	'user'	=>	'root',
    'pwd'	=>	'',
    'dbname' => 'data'
);
$mypdo= MyPDO::getInstance($param);
//獲取商品數(shù)據(jù)
$list=$mypdo->fetchAll('select * from products');
require './products_list.html';
?>
# products_list.html
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> <th>名稱</th> <th>價(jià)格</th> <th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>

演化二:分離模型

模型的規(guī)則

一個(gè)表對(duì)應(yīng)一個(gè)模型,表名和模型名必須一致
模型以Model結(jié)尾(不是必須的)

# index.php
<?php
//自動(dòng)加載類
spl_autoload_register(function($class_name){
	require "./{$class_name}.class.php";
});
// 實(shí)例化數(shù)據(jù)模型
$model= new ProductsModel();
$list= $model->getList();
// 加載視圖
require './products_list.html';
?>
# products_list.html
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> <th>名稱</th> <th>價(jià)格</th> <th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>
# ProductsModel.class.php
<?php
//products模型用來(lái)操作products表
class ProductsModel {
    // 獲取products表的數(shù)據(jù)
    public function getList(){
        // 連接數(shù)據(jù)庫(kù)
        $param= array(
            'user' => 'root',
            'pwd' => '',
            'dbname' => 'data'
        );
        $mypdo= MyPDO::getInstance($param);
        // 獲取商品數(shù)據(jù)
        return $mypdo->fetchAll('select * from products');
    }
}
?>

演化三:分離基礎(chǔ)模型

概念

連接數(shù)據(jù)庫(kù)的代碼每個(gè)模型都要使用
所有我們需要將連接數(shù)據(jù)庫(kù)的代碼封裝到基礎(chǔ)模型類中(Model)

# index.php
<?php
//自動(dòng)加載類
spl_autoload_register(function($class_name){
	require "./{$class_name}.class.php";
});
// 實(shí)例化數(shù)據(jù)模型
$model= new ProductsModel();
$list= $model->getList();
// 加載視圖
require './products_list.html';
?>
# products_list.html
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> <th>名稱</th> <th>價(jià)格</th> <th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>
# Model.class.php
<?php
// 基礎(chǔ)模型
class Model {
    protected $mypdo;
    public function __construct(){
        $this->initMyPDO();
    }
    // 連接數(shù)據(jù)庫(kù)
    private function initMyPDO(){
        $param= array(
            'user' => 'root',
            'pwd' => '',
            'dbname' => 'data'
        );
        $this->mypdo= MyPDO::getInstance($param);
    }
}
?>
# ProductsModel.class.php
<?php
//products模型用來(lái)操作products表
class ProductsModel extends Model{
    // 獲取products表的數(shù)據(jù)
    public function getList(){
        // 獲取商品數(shù)據(jù)
        return $this->mypdo->fetchAll('select * from products');
    }
}
?>

演化四:分離控制器

概念

控制器代碼放在index.php頁(yè)面中是不合理的
因?yàn)轫?xiàng)目中的控制器會(huì)很多,而index.php只有一個(gè)
所以需要將控制器分離開(kāi)來(lái)

控制器的規(guī)則

一個(gè)模塊必須對(duì)應(yīng)一個(gè)控制器
控制器以Controller結(jié)尾(不是必須的)
控制器中的方法以Action結(jié)尾(不是必須的)

目的防止方法名是PHP關(guān)鍵字

請(qǐng)求分發(fā)

每次請(qǐng)求都要從index.php進(jìn)入,所以index.php又叫入口文件
通過(guò)在url地址上傳遞參數(shù)來(lái)尋址

c 控制器
a 方法

# index.php
<?php
//自動(dòng)加載類
spl_autoload_register(function($class_name){
	require "./{$class_name}.class.php";
});
//確定路由
$c= $_GET['c']??'Products';   		//控制器
$a= $_GET['a']??'list';				//方法
$c= ucfirst(strtolower($c));		//首字母大寫
$a= strtolower($a);					//轉(zhuǎn)成小寫
$controller_name= $c.'Controller';	//拼接控制器類名
$action_name= $a.'Action';			//拼接方法名
//請(qǐng)求分發(fā)
$obj= new $controller_name();
$obj->$action_name();
?>
# products_list.html
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> <th>名稱</th> <th>價(jià)格</th> <th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>
# Model.class.php
<?php
// 基礎(chǔ)模型
class Model {
    protected $mypdo;
    public function __construct(){
        $this->initMyPDO();
    }
    // 連接數(shù)據(jù)庫(kù)
    private function initMyPDO(){
        $param= array(
            'user' => 'root',
            'pwd' => '',
            'dbname' => 'data'
        );
        $this->mypdo= MyPDO::getInstance($param);
    }
}
?>
# ProductsModel.class.php
<?php
//products模型用來(lái)操作products表
class ProductsModel extends Model{
    // 獲取products表的數(shù)據(jù)
    public function getList(){
        // 獲取商品數(shù)據(jù)
        return $this->mypdo->fetchAll('select * from products');
    }
}
?>
# ProductsController.class.php
<?php
// 商品模塊
class ProductsController {
    // 獲取商品列表
    public function listAction(){
        // 實(shí)例化數(shù)據(jù)模型
        $model= new ProductsModel();
        $list= $model->getList();
        // 加載視圖
        require './products_list.html';
    }
}
?>

刪除商品

# index.php
<?php
//自動(dòng)加載類
spl_autoload_register(function($class_name){
	require "./{$class_name}.class.php";
});
//確定路由
$c= $_GET['c']??'Products';   		//控制器
$a= $_GET['a']??'list';				//方法
$c= ucfirst(strtolower($c));		//首字母大寫
$a= strtolower($a);					//轉(zhuǎn)成小寫
$controller_name= $c.'Controller';	//拼接控制器類名
$action_name= $a.'Action';			//拼接方法名
//請(qǐng)求分發(fā)
$obj= new $controller_name();
$obj->$action_name();
?>
# products_list.html
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> 
			<th>名稱</th> 
			<th>價(jià)格</th> 
			<th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="index.php?c=Products&a=del&proid=<?=$rows['proID']?>" onclick="return confirm('確定要?jiǎng)h除嗎')">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>
# ProductsController.class.php
<?php
// 商品模塊
class ProductsController {
    // 獲取商品列表
    public function listAction(){
        // 實(shí)例化數(shù)據(jù)模型
        $model= new ProductsModel();
        $list= $model->getList();
        // 加載視圖
        require './products_list.html';
    }
    public function delAction(){
        $id= (int)$_GET['proid'];
        $model= new ProductsModel();
        if($model->del($id)){
            header('location:index.php?c=Products&a=list');
        }else{
            echo '刪除失敗!';
            exit;
        }
    }
}
?>
# ProductsModel.class.php
<?php
//products模型用來(lái)操作products表
class ProductsModel extends Model{
    // 獲取products表的數(shù)據(jù)
    public function getList(){
        // 獲取商品數(shù)據(jù)
        return $this->mypdo->fetchAll('select * from products');
    }
    // 刪除products表的數(shù)據(jù)
    public function del($proid){
        // 刪除商品數(shù)據(jù)
        return $this->mypdo->exec("delete from products where proID={$proid}");
    }
}
?>

框架目錄

創(chuàng)建目錄結(jié)構(gòu)

Application 應(yīng)用程序

Config 配置文件
Controller 控制器

Admin 后臺(tái)控制器
Home 前臺(tái)控制器

Model 模型
View 視圖

Admin 后臺(tái)視圖
Home 前臺(tái)視圖

Framework 框架

Core 核心
Lib 擴(kuò)展

Public 靜態(tài)資源

Traits 復(fù)用代碼

文件分類存放

概念

由于每次都請(qǐng)求入口文件,所以”.“表示入口文件所在的目錄

Application

Config

config.php

Controller

Admin

ProductsController.class.php

Home

Model

ProductsModel.class.php

View

Admin

products_list.html

Home

Framework

Core

Framework.class.php
Model.class.php
MyPDO.class.php

Lib

Public

images

error.fw.png
success.fw.png

Traits

Jump.class.php

index.php

添加命名空間

概念

通過(guò)文件目錄地址做命名空間
這樣獲取了命名空間就能知道文件存放的地址

# Model.class.php
<?php
namespace Core;
class Model {
    ...
}
?>
# MyPDO.class.php
<?php
namespace Core;
class MyPDO {
    ...
}
?>
# ProductsModel.class.php
<?php
namespace Model;
class ProductsModel extends Model {
    ...
}
?>
# ProductsController.class.php
<?php
namespace ControllerAdmin;
class ProductsController {
    ...
}
?>

框架類實(shí)現(xiàn)

定義路徑常量

概念

由于文件路徑使用頻率很高,而且路徑比較長(zhǎng)
所以將固定不變的路徑定義成路徑常量

知識(shí)點(diǎn)

getcwd() 入口文件的絕對(duì)路徑
windows下默認(rèn)的目錄分隔符是,Linux下默認(rèn)的目錄分隔符是/
DIRECTORY_SEPARATOR常量根據(jù)不同的操作系統(tǒng)返回不同的目錄分隔符

# Framework.class.php
private static function initConst(){
    define('DS', DIRECTORY_SEPARATOR);  //定義目錄分隔符
    define('ROOT_PATH', getcwd().DS);  //入口文件所在的目錄
    define('APP_PATH', ROOT_PATH.'Application'.DS);   //application目錄
    define('CONFIG_PATH', APP_PATH.'Config'.DS);
    define('CONTROLLER_PATH', APP_PATH.'Controller'.DS);
    define('MODEL_PATH', APP_PATH.'Model'.DS);
    define('VIEW_PATH', APP_PATH.'View'.DS);
    define('FRAMEWORK_PATH', ROOT_PATH.'Framework'.DS);
    define('CORE_PATH', FRAMEWORK_PATH.'Core'.DS);
    define('LIB_PATH', FRAMEWORK_PATH.'Lib'.DS);
    define('TRAITS_PATH', ROOT_PATH.'Traits'.DS);
}

引入配置文件

概述

在PHP7.0之前,常量不能保存數(shù)組和對(duì)象

# config.php
return array(
    //數(shù)據(jù)庫(kù)配置
    'database'=>array(),
    //應(yīng)用程序配置
    'app'=>array(
        'dp' => 'Admin',        //默認(rèn)平臺(tái)
        'dc' => 'Products',     //默認(rèn)控制器
        'da' => 'list'          //默認(rèn)方法
    )
);
# Framework.class.php
private static function initConfig(){
    $GLOBALS['config']= require CONFIG_PATH.'config.php';
}

確定路由

概述

p 平臺(tái)[platform]
c 控制器[controller]
a 方法[action]

# Framework.class.php
private static function initRoutes(){
    $p= $_GET['p']??$GLOBALS['config']['app']['dp'];
    $c= $_GET['c']??$GLOBALS['config']['app']['dc'];
    $a= $_GET['a']??$GLOBALS['config']['app']['da'];
    $p= ucfirst(strtolower($p));
    $c= ucfirst(strtolower($c));		
    $a= strtolower($a);			
    define('PLATFROM_NAME', $p);    //平臺(tái)名常量
    define('CONTROLLER_NAME', $c);  //控制器名常量
    define('ACTION_NAME', $a);      //方法名常量
    define('__URL__', CONTROLLER_PATH.$p.DS);   //當(dāng)前請(qǐng)求控制器的目錄地址
    define('__VIEW__',VIEW_PATH.$p.DS);     //當(dāng)前視圖的目錄地址
}

自動(dòng)加載類

# Framework.class.php
private static function initAutoLoad(){
    spl_autoload_register(function($class_name){
        $namespace= dirname($class_name);   //命名空間
        $class_name= basename($class_name); //類名
        if(in_array($namespace, array('Core','Lib')))   //命名空間在Core和Lib下
            $path= FRAMEWORK_PATH.$namespace.DS.$class_name.'.class.php';
        elseif($namespace=='Model')     //文件在Model下
            $path=MODEL_PATH.$class_name.'.class.php';
        elseif($namespace=='Traits')    //文件在Traits下
            $path=TRAITS_PATH.$class_name.'.class.php';
        else   //控制器
            $path=CONTROLLER_PATH.PLATFROM_NAME.DS.$class_name.'.class.php'; 
        if(file_exists($path) && is_file($path))
            require $path;
    });
}

請(qǐng)求分發(fā)

# Framework.class.php
private static function initDispatch(){
    $controller_name='Controller\'.PLATFROM_NAME.'\'.CONTROLLER_NAME.'Controller';	//拼接控制器類名
    $action_name=ACTION_NAME.'Action';	//拼接方法名
    $obj=new $controller_name();
    $obj->$action_name();
} 

封裝run()方法

# Framework.class.php
class Framework{
    //啟動(dòng)框架
    public static function run(){
        self::initConst();
        self::initConfig();
        self::initRoutes();
        self::initAutoLoad();
        self::initDispatch();
    }
}

在入口中調(diào)用run()方法

概述

run()方法調(diào)用后就啟動(dòng)了框架

# index.php
<?php
require './Framework/Core/Framework.class.php';
Framework::run();
?>

SQL方法封裝

生成insert語(yǔ)句

知識(shí)點(diǎn)

array_keys($arr) 返回?cái)?shù)組的鍵
array_values($arr) 返回?cái)?shù)組的值
array_map(fun(), $arr) 將函數(shù)作用到數(shù)組中的每個(gè)值上,并返回帶有新值的數(shù)組

$table= 'products';	//表名
//插入的數(shù)據(jù)
$data['proid']='007';
$data['proname']='鋼筆';
$data['proprice']=120;
//第一步:拼接字段名
$keys=array_keys($data);		//獲取所有的字段名
$keys=array_map(function($key){	//在所有的字段名上添加反引號(hào)
	return "`{$key}`";
},$keys);
$keys=implode(',',$keys);		//字段名用逗號(hào)連接起來(lái)
//第二步:拼接值
$values=array_values($data);	//獲取所有的值
$values=array_map(function($value){	//所有的值上添加單引號(hào)
	return "'{$value}'";
},$values);
$values=implode(',',$values);	//值通過(guò)逗號(hào)連接起來(lái)
//第三步:拼接SQL語(yǔ)句
echo $sql="insert into `{$table}` ($keys) values ($values)";

生成更新語(yǔ)句

知識(shí)點(diǎn)

array_search(value, $arr) 在數(shù)組中搜索某個(gè)鍵值,并返回對(duì)應(yīng)的鍵名

$table='products';	                //表名
$data['proname']='鋼筆';
$data['proprice']=120;
$data['proID']='111';
//獲取主鍵
function getPrimaryKey($table) {
	//連接數(shù)據(jù)庫(kù)
	$link=mysqli_connect('localhost','root','root','data');
	mysqli_set_charset($link,'utf8');
	//查看表結(jié)構(gòu)
	$rs=mysqli_query($link,"desc `{$table}`");
	//循環(huán)判斷主鍵
	while($rows=mysqli_fetch_assoc($rs)){
		if($rows['Key']=='PRI')
			return $rows['Field'];
	}
}
//第一步:獲取非主鍵
$keys=array_keys($data);	    //獲取所有鍵
$pk=getPrimaryKey($table);	    //獲取主鍵
$index=array_search($pk,$keys);	//返回主鍵在數(shù)組中的下標(biāo)
unset($keys[$index]);		    //刪除主鍵
//第二步:拼接`鍵`='值'的形式
$keys=array_map(function($key) use ($data){
	return "`{$key}`='{$data[$key]}'";
},$keys);
$keys=implode(',',$keys);
//第三步:拼接SQL語(yǔ)句
echo $sql="update `{$table}` set $keys where $pk='{$data[$pk]}'";

生成select語(yǔ)句

知識(shí)點(diǎn)

is_array($arr) 判斷變量是否為數(shù)組

function select($table,$cond=array()) {
	$sql="select * from `{$table}` where 1";
	//拼接條件
	if(!empty($cond)){
		foreach($cond as $k=>$v){
			if(is_array($v)){	        //條件的值是數(shù)組類型
				switch($v[0]){	        //$v[0]保存的是符號(hào),$v[1]是值
					case 'eq':		    //等于  equal
						$op='=';
						break;
					case 'gt':		    //大于  greater than
						$op='>';
						break;
					case 'lt':
						$op='<';
						break;
					case 'gte':
					case 'egt':
						$op='>=';
						break;
					case 'lte':
					case 'elt':
						$op='<=';
						break;
					case 'neq':
						$op='<>';
						break;
				}
				$sql.=" and `$k` $op '$v[1]'";
			}else{
				$sql.=" and `$k`='$v'";
			}
		}
	}
	return $sql;
}
//測(cè)試
$table='products';	//表名
$cond=array(
	'proname'	=>	'鋼筆',
	'proprice'	=>	array('eq','12'),
	'aa'	=>	array('gt',10),
	'bb'	=>	array('lt',20),
);
echo select($table),'<br>';
echo select($table,$cond);

獲取表名

知識(shí)點(diǎn)

get_class($this) 返回實(shí)例對(duì)象的類(包括命名空間)
basename($path) 返回路徑中的文件名部分
substr($str, startNum, endNum) 截取字符串

class Model {
	private $table;
	public function __construct($table='') {
		if($table!='')		//直接給基礎(chǔ)模型傳遞表名
			$this->table=$table;
		else {				//實(shí)例化子類模型
			$this->table=substr(basename(get_class($this)),0,-5);
		}
		echo $this->table,'<br>';
	}
}

在項(xiàng)目中封裝萬(wàn)能的增、刪、改、查

概念

由于封裝的方法可以操作所有的表
可以將這些方法封裝在基礎(chǔ)模型中

<?php
namespace Core;
//基礎(chǔ)模型
class Model {
    protected $mypdo;
    private $table; //表名
    private $pk;    //主鍵
    public function __construct($table=''){
        $this->initMyPDO();
        $this->initTable($table);
        $this->getPrimaryKey();
    }
    //連接數(shù)據(jù)庫(kù)
    private function initMyPDO() {
        $this->mypdo= MyPDO::getInstance($GLOBALS['config']['database']);
    }
    //獲取表名
    private function initTable($table){
        if($table!='')		//直接給基礎(chǔ)模型傳遞表名
            $this->table=$table;
        else {				//實(shí)例化子類模型
            $this->table=substr(basename(get_class($this)),0,-5);
        }
    }
    //獲取主鍵
    private function getPrimaryKey() {
        $rs=$this->mypdo->fetchAll("desc `{$this->table}`");
        foreach($rs as $rows){
            if($rows['Key']=='PRI'){
                $this->pk=$rows['Field'];
                break;
            }
        }
    }
    //萬(wàn)能的插入
    public function insert($data){
        $keys=array_keys($data);		//獲取所有的字段名
        $keys=array_map(function($key){	//在所有的字段名上添加反引號(hào)
                return "`{$key}`";
        },$keys);
        $keys=implode(',',$keys);		//字段名用逗號(hào)連接起來(lái)
        $values=array_values($data);	//獲取所有的值
        $values=array_map(function($value){	//所有的值上添加單引號(hào)
                return "'{$value}'";
        },$values);
        $values=implode(',',$values);	//值通過(guò)逗號(hào)連接起來(lái)
        $sql="insert into `{$this->table}` ($keys) values ($values)";
        return $this->mypdo->exec($sql);
    }
    //萬(wàn)能的更新
    public function update($data){
        $keys=array_keys($data);	//獲取所有鍵
        $index=array_search($this->pk,$keys);	//返回主鍵在數(shù)組中的下標(biāo)
        unset($keys[$index]);		//刪除主鍵
        $keys=array_map(function($key) use ($data){
                return "`{$key}`='{$data[$key]}'";
        },$keys);
        $keys=implode(',',$keys);
        $sql="update `{$this->table}` set $keys where $this->pk='{$data[$this->pk]}'";
        return $this->mypdo->exec($sql);
    }
    //刪除
    public function delete($id){
        $sql="delete from `{$this->table}` where `{$this->pk}`='$id'";
        return $this->mypdo->exec($sql);
    }
    //查詢,返回二維數(shù)組
    public function select($cond=array()){
        $sql="select * from `{$this->table}` where 1";
        if(!empty($cond)){
            foreach($cond as $k=>$v){
                if(is_array($v)){	        //條件的值是數(shù)組類型
                    switch($v[0]){	    //$v[0]保存的是符號(hào),$v[1]是值
                        case 'eq':		//等于  equal
                            $op='=';
                            break;
                        case 'gt':		//大于  greater than
                            $op='>';
                            break;
                        case 'lt':
                            $op='<';
                            break;
                        case 'gte':
                        case 'egt':
                            $op='>=';
                            break;
                        case 'lte':
                        case 'elt':
                            $op='<=';
                            break;
                        case 'neq':
                            $op='<>';
                            break;
                    }
                    $sql.=" and `$k` $op '$v[1]'";
                }else{
                    $sql.=" and `$k`='$v'";
                }
            }
        }
        return $this->mypdo->fetchAll($sql);
    }
    //查詢,返回一維數(shù)組
    public function find($id){
        $sql="select * from `{$this->table}` where `{$this->pk}`='$id'";
        return $this->mypdo->fetchRow($sql);
    }
}
?>

MVC框架代碼

入口文件

# index.php
<?php
require './Framework/Core/Framework.class.php';
Framework::run();
?>

框架文件

# Framework/Core/Framework.class.php
<?php
class Framework{
    //啟動(dòng)框架
    public static function run(){
        self::initConst();
        self::initConfig();
        self::initRoutes();
        self::initAutoLoad();
        self::initDispatch();
    }
    //定義路徑常量
    private static function initConst(){
        define('DS', DIRECTORY_SEPARATOR);  //定義目錄分隔符
        define('ROOT_PATH', getcwd().DS);  //入口文件所在的目錄
        define('APP_PATH', ROOT_PATH.'Application'.DS);   //application目錄
        define('CONFIG_PATH', APP_PATH.'Config'.DS);
        define('CONTROLLER_PATH', APP_PATH.'Controller'.DS);
        define('MODEL_PATH', APP_PATH.'Model'.DS);
        define('VIEW_PATH', APP_PATH.'View'.DS);
        define('FRAMEWORK_PATH', ROOT_PATH.'Framework'.DS);
        define('CORE_PATH', FRAMEWORK_PATH.'Core'.DS);
        define('LIB_PATH', FRAMEWORK_PATH.'Lib'.DS);
        define('TRAITS_PATH', ROOT_PATH.'Traits'.DS);
    }
    //引入配置文件
    private static function initConfig(){
       $GLOBALS['config']=require CONFIG_PATH.'config.php';
    }
    //確定路由
    private static function initRoutes(){
        $p=$_GET['p']??$GLOBALS['config']['app']['dp'];
        $c=$_GET['c']??$GLOBALS['config']['app']['dc'];
        $a=$_GET['a']??$GLOBALS['config']['app']['da'];
        $p=ucfirst(strtolower($p));
        $c=ucfirst(strtolower($c));		//首字母大寫
        $a=strtolower($a);			//轉(zhuǎn)成小寫
        define('PLATFROM_NAME', $p);    //平臺(tái)名常量
        define('CONTROLLER_NAME', $c);  //控制器名常量
        define('ACTION_NAME', $a);      //方法名常量
        define('__URL__', CONTROLLER_PATH.$p.DS);   //當(dāng)前請(qǐng)求控制器的目錄地址
        define('__VIEW__',VIEW_PATH.$p.DS);     //當(dāng)前視圖的目錄地址
    }
    //自動(dòng)加載類
    private static function initAutoLoad(){
        spl_autoload_register(function($class_name){
            $namespace= dirname($class_name);   //命名空間
            $class_name= basename($class_name); //類名
            if(in_array($namespace, array('Core','Lib')))   //命名空間在Core和Lib下
                $path= FRAMEWORK_PATH.$namespace.DS.$class_name.'.class.php';
            elseif($namespace=='Model')     //文件在Model下
                $path=MODEL_PATH.$class_name.'.class.php';
            elseif($namespace=='Traits')    //文件在Traits下
                $path=TRAITS_PATH.$class_name.'.class.php';
            else   //控制器
                $path=CONTROLLER_PATH.PLATFROM_NAME.DS.$class_name.'.class.php'; 
            if(file_exists($path) && is_file($path))
                require $path;
        });
    }
    //請(qǐng)求分發(fā)
    private static function initDispatch(){
        $controller_name='Controller\'.PLATFROM_NAME.'\'.CONTROLLER_NAME.'Controller';	//拼接控制器類名
        $action_name=ACTION_NAME.'Action';	//拼接方法名
        $obj=new $controller_name();
        $obj->$action_name();
    } 
}

配置文件

# Application/Config/config.php
<?php
return array(
    //數(shù)據(jù)庫(kù)配置
    'database'=>array(),
    //應(yīng)用程序配置
    'app'=>array(
        'dp' => 'Admin',        //默認(rèn)平臺(tái)
        'dc' => 'Products',     //默認(rèn)控制器
        'da' => 'list'          //默認(rèn)方法
    )
);
?>

基礎(chǔ)模型

# Framework/Core/Model.class.php
<?php
namespace Core;
class Model {
    protected $mypdo;
    public function __construct(){
        $this->initMyPDO();
    }
    // 連接數(shù)據(jù)庫(kù)
    private function initMyPDO(){
        $this->mypdo= MyPDO::getInstance($GLOBALS['config']['database']);
    }
}
?>

PDO數(shù)據(jù)庫(kù)

# Framework/Core/MyPDO.class.php
<?php
namespace Core;
class MyPDO{
    private $type;      //數(shù)據(jù)庫(kù)類別
    private $host;      //主機(jī)地址
    private $port;      //端口號(hào)
    private $dbname;    //數(shù)據(jù)庫(kù)名
    private $charset;   //字符集
    private $user;      //用戶名
    private $pwd;       //密碼
    private $pdo;       //保存PDO對(duì)象
    private static $instance;
    private function __construct($param) {
        $this->initParam($param);
        $this->initPDO();
        $this->initException();
    }
    private function __clone() {
    }
    public static function getInstance($param=array()){
        if(!self::$instance instanceof self)
            self::$instance=new self($param);
        return self::$instance;
    }
    //初始化參數(shù)
    private function initParam($param){
        $this->type=$param['type']??'mysql';
        $this->host=$param['host']??'127.0.0.1';
        $this->port=$param['port']??'3306';
        $this->dbname=$param['dbname']??'data';
        $this->charset=$param['charset']??'utf8';
        $this->user=$param['user']??'root';
        $this->pwd=$param['pwd']??'';
    }
    //初始化PDO
    private function initPDO(){
        try{
            $dsn="{$this->type}:host={$this->host};port={$this->port};dbname={$this->dbname};charset={$this->charset}";
            $this->pdo=new PDO($dsn, $this->user, $this->pwd);
        } catch (PDOException $ex) {
            $this->showException($ex);
            exit;
        }
    }
    
    //顯示異常
    private function showException($ex,$sql=''){
        if($sql!=''){
            echo 'SQL語(yǔ)句執(zhí)行失敗<br>';
            echo '錯(cuò)誤的SQL語(yǔ)句是:'.$sql,'<br>';
        }
        echo '錯(cuò)誤編號(hào):'.$ex->getCode(),'<br>';
        echo '錯(cuò)誤行號(hào):'.$ex->getLine(),'<br>';
        echo '錯(cuò)誤文件:'.$ex->getFile(),'<br>';
        echo '錯(cuò)誤信息:'.$ex->getMessage(),'<br>';
    }
    //設(shè)置異常模式
    private function initException(){
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }

    //執(zhí)行增、刪、改操作
    public function exec($sql){
        try{
            return $this->pdo->exec($sql);
        } catch (PDOException $ex) {
            $this->showException($ex, $sql);
            exit;
        }
    }
    //獲取自動(dòng)增長(zhǎng)的編號(hào)
    public function lastInsertId(){
        return $this->pdo->lastInsertId();
    }

    //判斷匹配的類型
    private function fetchType($type){
        switch ($type){
            case 'num':
                return PDO::FETCH_NUM;
            case 'both':
                return PDO::FETCH_BOTH;
            case 'obj':
                return PDO::FETCH_OBJ;
            default:
                return PDO::FETCH_ASSOC;
        }
    }
    //獲取所有數(shù)據(jù) ,返回二維數(shù)組
    public function fetchAll($sql,$type='assoc'){
        try{
            $stmt=$this->pdo->query($sql);  //獲取PDOStatement對(duì)象
            $type= $this->fetchType($type); //獲取匹配方法
            return $stmt->fetchAll($type);
        } catch (Exception $ex) {
            $this->showException($ex, $sql);
        }
    }
    //獲取一維數(shù)組
    public function fetchRow($sql,$type='assoc'){
        try{
            $stmt=$this->pdo->query($sql);  //獲取PDOStatement對(duì)象
            $type= $this->fetchType($type); //獲取匹配方法
            return $stmt->fetch($type);
        } catch (Exception $ex) {
            $this->showException($ex, $sql);
            exit;
        }
    }
    //返回一行一列
    public function fetchColumn($sql){
        try{
             $stmt=$this->pdo->query($sql);
            return $stmt->fetchColumn();
        } catch (Exception $ex) {
            $this->showException($ex, $sql);
            exit;
        }
    }
}
?>

控制器

# Application/Controller/Admin/ProductsController.class.php
<?php
namespace ControllerAdmin;
// 商品模塊
class ProductsController {
    use TraitsJump;
    // 獲取商品列表
    public function listAction(){
        // 實(shí)例化數(shù)據(jù)模型
        $model= new ModelProductsModel();
        $list= $model->getList();
        // 加載視圖
        require __VIEW__.'products_list.html';
    }
    public function delAction(){
        $id= (int)$_GET['proid'];
        $model= new ModelProductsModel();
        if($model->del($id)){
            $this->success('index.php?p=Admin&c=Products&a=list', '刪除成功');
        }else{
            $this->error('index.php?p=admin&c=Products&a=list', '刪除失敗');
        }
    }
}
?>

方法模型

# Application/Model/ProductsModel.class.php
<?php
namespace Model;
//products模型用來(lái)操作products表
class ProductsModel extends CoreModel{
    // 獲取products表的數(shù)據(jù)
    public function getList(){
        // 獲取商品數(shù)據(jù)
        return $this->mypdo->fetchAll('select * from products');
    }
    // 刪除products表的數(shù)據(jù)
    public function del($proid){
        // 刪除商品數(shù)據(jù)
        return $this->mypdo->exec("delete from products where proID={$proid}");
    }
}
?>

視圖

# Application/View/Admin/products_list.html
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>顯示商品</title>
</head>
<body>
	<table border='1' width='980' bordercolor='#000'>
		<tr>
			<th>編號(hào)</th> 
			<th>名稱</th> 
			<th>價(jià)格</th> 
			<th>刪除</th>
		</tr>
		<?php foreach($list as $rows):?>
		<tr>
			<td><?=$rows['proID']?></td>
			<td><?=$rows['proname']?></td>
			<td><?=$rows['proprice']?></td>
			<td><a href="index.php?p=Admin&c=Products&a=del&proid=<?=$rows['proID']?>" onclick="return confirm('確定要?jiǎng)h除嗎')">刪除</a></td>
		</tr>
		<?php endforeach;?>
	</table>
</body>
</html>

復(fù)用跳轉(zhuǎn)

# Traits/Jump.class.php
<?php
//跳轉(zhuǎn)的插件
namespace Traits;
trait Jump{
    //封裝成功的跳轉(zhuǎn)
    public function success($url,$info='',$time=1){
        $this->redirect($url, $info, $time, 'success');
    }
    //封裝失敗跳轉(zhuǎn)
    public function error($url,$info='',$time=3){
        $this->redirect($url, $info, $time, 'error');
    }
    /*
     * 作用:跳轉(zhuǎn)的方法
     * @param $url string 跳轉(zhuǎn)的地址
     * @param $info string 顯示信息
     * @param $time int 停留時(shí)間
     * @param $flag string 顯示模式  success|error
     */
    private function redirect($url,$info,$time,$flag){
        if($info=='')
            header ("location:{$url}");
        else{
          echo <<<str
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <!--
                <meta http-equiv="refresh" content="3;http://www.php.com"/>
                -->
                <title>Document</title>
            <style>
            body{
                text-align: center;
                font-family: '微軟雅黑';
                font-size: 18px;
            }
            #success,#error{
                font-size: 36px;
                margin: 10px auto;
            }
            #success{
                color: #090;
            }
            #error{
                color: #F00;
            }
            </style>
            </head>
            <body>
                <img src="./Public/images/{$flag}.fw.png">
                <div id='{$flag}'>{$info}</div>
                <div><span id='t'>{$time}</span>秒以后跳轉(zhuǎn)</div>
            </body>
            </html>
            <script>
            window.onload=function(){
                var t={$time};
                setInterval(function(){
                    document.getElementById('t').innerHTML=--t;
                    if(t==0)
                        location.href='index.php';
                },1000)
            }
            </script>
            str;
        exit;
        }
    }
}

總結(jié)

以上是生活随笔為你收集整理的PHP核心之MVC设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

中文字幕在线观看第一页 | 免费在线看成人av | 青青色影院 | 激情久久网 | 97国产精品亚洲精品 | 激情丁香综合五月 | 99热在线这里只有精品 | 亚洲电影自拍 | 美女网站在线看 | 久久精品在线视频 | 特级片免费看 | 91精品在线看 | 午夜私人影院久久久久 | 中文永久免费观看 | 五月综合激情网 | 中文字幕视频一区二区 | 一区二区三区免费在线观看视频 | 99r国产精品| 韩国av三级 | 欧美国产视频在线 | 992tv在线观看网站 | 亚洲资源网| 在线国产一区二区 | 日韩成人免费在线 | 免费三级a | 碰超在线97人人 | 婷婷色av| 成人国产精品电影 | 欧美精品在线免费 | 午夜免费在线观看 | 久久黄色网址 | 国产一线在线 | 日韩在线视频免费观看 | 在线观看成人 | 国产日产高清dvd碟片 | 久久免费视频一区 | 亚洲成人软件 | 日韩欧美精品一区 | 99久久精品国产观看 | 日韩va欧美va亚洲va久久 | 麻豆91精品视频 | 国产精品欧美久久久久天天影视 | 亚洲精品综合在线观看 | 国产精品 国内视频 | 欧美精品在线观看一区 | 国产 在线 高清 精品 | 天天精品视频 | 亚洲成人国产精品 | www天天操| 中文字幕大全 | 免费在线观看视频一区 | 亚洲精品在线播放视频 | 久久精品播放 | 成人中文字幕在线 | 7777xxxx| 深夜免费小视频 | 亚洲精品一区二区网址 | 精品成人网 | 国产成人61精品免费看片 | 色欲综合视频天天天 | 国产 字幕 制服 中文 在线 | 高清免费在线视频 | 美女天天操| 精品一区二区三区久久久 | 日韩在线视频一区二区三区 | av网站在线观看播放 | 精品久久久久久久久久岛国gif | 亚州精品天堂中文字幕 | 久久国产二区 | 91网址在线| 日韩av图片 | 日韩一区二区三区免费视频 | 九九九电影免费看 | 十八岁免进欧美 | 99热9 | 在线日韩亚洲 | 啪啪精品| 97香蕉视频 | 亚洲麻豆精品 | 亚洲免费资源 | 一区二区三区在线观看 | 福利在线看片 | 亚洲欧美日韩一区二区三区在线观看 | 欧美日韩在线视频一区 | 国内精品视频在线 | 高清色免费 | 久爱精品在线 | 国产精华国产精品 | 日本午夜免费福利视频 | 免费精品人在线二线三线 | 国内精品小视频 | 国产午夜影院 | 亚洲污视频 | 97国产精品一区二区 | 99国产免费网址 | 国产精品少妇 | 久久久久久久综合色一本 | 国产精品麻豆果冻传媒在线播放 | 免费高清看电视网站 | 色婷婷天天干 | 999电影免费在线观看2020 | 99国产在线视频 | 免费午夜视频在线观看 | 亚洲网久久| 亚洲精色 | 国产免费美女 | a级国产毛片 | av黄色免费在线观看 | 久久综合偷偷噜噜噜色 | 97成人免费 | 国产黄色片网站 | 99精品色| av免费成人| 国产69精品久久久久99 | 久久精品国产一区二区三 | 国产一区二区三区午夜 | 九九热免费视频在线观看 | 中文字幕一区二区三区乱码在线 | 99视频在线看 | 韩国av一区二区三区在线观看 | 日韩特黄一级欧美毛片特黄 | 国产日产欧美在线观看 | 激情综合网五月激情 | 色永久免费视频 | 久久久久女人精品毛片 | 精品一二三区视频 | 免费三级影片 | 美女黄频视频大全 | 久久99精品久久久久久秒播蜜臀 | 97视频播放| 国产一区二区视频在线播放 | 人人爱人人舔 | 久久美女视频 | 99久久婷婷国产综合亚洲 | 黄色av网站在线观看 | 欧美日韩在线观看一区二区 | 国产成免费视频 | 一级a性色生活片久久毛片波多野 | 久久理论影院 | 久久免费国产精品 | 精品在线观看一区二区 | 国产99久久久欧美黑人 | 中文字幕 国产精品 | 日韩二区精品 | 日韩精品在线一区 | 区一区二在线 | 99久久精品免费看国产免费软件 | av在线亚洲天堂 | 欧美日韩一级视频 | 天天射天天艹 | 国产成人av电影在线 | 日韩欧美视频在线免费观看 | 91传媒在线看 | 视频国产一区二区三区 | 日韩午夜剧场 | 91丨九色丨丝袜 | 欧美日韩精品在线观看视频 | 在线亚洲精品 | 久久精品直播 | 国产一区免费 | 婷婷色社区 | 日本丰满少妇免费一区 | 欧美小视频在线观看 | 国产午夜精品理论片在线 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 中文字幕资源网 | 欧美午夜视频在线 | 国产又粗又猛又爽又黄的视频先 | 亚洲电影av在线 | 亚洲黄色精品 | 狠狠狠色丁香综合久久天下网 | 日本不卡一区二区三区在线观看 | 日日夜夜av | 国产a视频免费观看 | 99精品视频观看 | 国产一区二区三区 在线 | 久久综合免费视频 | 亚洲午夜久久久久久久久久久 | 青青河边草手机免费 | 欧美三人交 | 色偷偷中文字幕 | 九九热re| av一级片在线观看 | 国产一区二区在线播放视频 | 欧美精品九九99久久 | 亚洲精品国产欧美在线观看 | 亚洲精品乱码久久久久久9色 | 久久伊人色综合 | 在线看片日韩 | 久久久久久97三级 | 成人电影毛片 | 欧美国产高清 | 亚洲高清久久久 | 久久国产电影 | 欧美色图亚洲图片 | 亚洲另类xxxx| 日韩精品一区二区在线观看视频 | 欧美日韩在线精品一区二区 | 国产精品毛片一区视频播 | 99久久影院 | 久久精品国产亚洲 | 在线成人国产 | 亚洲精品国内 | 欧美-第1页-屁屁影院 | 中文字幕av在线免费 | 精品99久久久久久 | 手机av在线免费观看 | 亚洲男男gaygayxxxgv | 午夜精品一区二区三区在线观看 | 日韩视频一区二区三区 | 四虎影视国产精品免费久久 | 欧美在线观看视频 | 亚洲深夜影院 | 狠狠色伊人亚洲综合成人 | 日韩欧美视频在线播放 | 国产一区二区三区四区在线 | 999久久久久 | 一区二区三区免费播放 | 精品毛片一区二区免费看 | 午夜视频在线观看一区二区 | 97视频免费在线看 | 在线a亚洲视频播放在线观看 | 日韩二区三区在线 | 青春草免费视频 | 在线观看一级片 | 国产四虎影院 | 国产成人免费在线 | 日韩欧美一区二区在线播放 | 精品91| 91网页版免费观看 | 男女激情片在线观看 | 久久xx视频| 国产九九九精品视频 | 五月天激情综合网 | 在线观看成人 | 天天看天天操 | 69精品久久| 免费人人干 | 日韩久久影院 | 亚洲国产合集 | 欧美一区日韩一区 | 亚洲精品欧洲精品 | 精品美女在线视频 | 99精品国产99久久久久久福利 | a级片在线播放 | 欧美精品成人在线 | 麻豆免费视频观看 | 在线视频观看成人 | 亚洲九九 | 在线 影视 一区 | 中文字幕视频观看 | 亚洲最新av在线 | 女人18精品一区二区三区 | 日日草夜夜操 | 日韩精品综合在线 | 成人久久久电影 | 99视频在线观看免费 | 国产精品欧美激情在线观看 | 四虎影视成人精品国库在线观看 | 久草在线视频首页 | 毛片一区二区 | 久久99国产精品久久99 | 青草视频网 | 丁香激情婷婷 | 亚洲一级黄色片 | 国产一级特黄毛片在线毛片 | 日韩欧美亚州 | 久久这里只有精品1 | 黄色视屏免费在线观看 | 国产二区视频在线观看 | 久久久久久看片 | 69久久久| 最近免费中文字幕 | 色狠狠综合天天综合综合 | 91精品久久久久久久91蜜桃 | 高清中文字幕 | 日韩在线一区二区免费 | 四虎在线免费观看 | 日本性生活免费看 | av丝袜制服 | 97视频免费观看2区 亚洲视屏 | 国产福利91精品张津瑜 | 国内精品久久久久久久影视麻豆 | 婷婷深爱网 | 亚洲观看黄色网 | 日日夜夜91| 热re99久久精品国产66热 | 午夜在线免费观看 | 在线观看黄色的网站 | 国产欧美综合在线观看 | 国产精品岛国久久久久久久久红粉 | 欧美日韩在线观看不卡 | 天天摸日日摸人人看 | 91网站观看| 欧美va天堂va视频va在线 | 99精品久久久久 | 日韩av资源站 | 正在播放国产91 | 91自拍视频在线 | 国产一级视频在线免费观看 | 98超碰人人 | 国产成人61精品免费看片 | 激情综合啪 | 狠狠色噜噜狠狠狠狠2021天天 | av福利免费 | 日本中文字幕在线看 | 国产精品18久久久久久首页狼 | 日韩一区二区三区免费视频 | 亚洲美女视频在线 | 日韩精品一区二区免费 | 久久伊人91| 国产精品九九久久久久久久 | 在线观看黄av | 精品一区在线 | 黄网站色视频免费观看 | 久久免费视频一区 | 国产成人免费观看 | 日日夜夜艹 | 91热视频在线观看 | 欧美日韩成人一区 | 日韩一二区在线观看 | 欧美一级片 | 精品国产伦一区二区三区观看方式 | 亚洲韩国一区二区三区 | www.久久爱.cn| 久色婷婷| 久久99热久久99精品 | 毛片网免费| 久久精品亚洲一区二区三区观看模式 | 日韩视频一区二区三区在线播放免费观看 | 国产免费一区二区三区网站免费 | 亚洲精品黄色在线观看 | 国产一区二区精品久久91 | 在线不卡中文字幕播放 | 国产91亚洲精品 | 亚洲午夜久久久综合37日本 | 国产精品永久久久久久久久久 | 色综合久久天天 | 四虎免费在线观看视频 | 99精品视频中文字幕 | 久久国产精品免费一区二区三区 | 久久99免费观看 | 天天色天天色天天色 | 999日韩| 韩国av一区二区三区 | 成人在线观看资源 | 97精品国产97久久久久久久久久久久 | 麻豆91小视频 | 国产精品99爱 | 国产亚洲字幕 | 婷婷综合视频 | 日韩色一区二区三区 | 婷婷丁香激情五月 | 亚洲高清视频在线观看免费 | 99免费在线播放99久久免费 | 久久天堂影院 | 三上悠亚一区二区在线观看 | 国产精品久久久久久久av电影 | 五月激情五月激情 | 黄色免费高清视频 | 激情久久一区二区三区 | 天天躁日日躁狠狠躁av麻豆 | 网站免费黄色 | 99久久婷婷国产一区二区三区 | 欧美一级特黄高清视频 | 亚洲欧美日韩精品久久久 | 久久久精品免费观看 | 国产精品毛片一区视频播不卡 | 青青看片 | 激情久久小说 | 久久久精选 | 日日夜夜狠狠操 | 中文十次啦 | 黄色在线成人 | 欧美另类xxx | 精品久久毛片 | 国产 视频 久久 | www在线观看视频 | 日韩激情在线视频 | 精品国产免费观看 | 久久综合一本 | 国产精品一区二区美女视频免费看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 在线观看小视频 | 五月激情视频 | 中文字幕欧美日韩va免费视频 | 国产伦精品一区二区三区照片91 | 狠色在线 | 夜夜躁狠狠躁日日躁 | 欧美va日韩va | 国产精品k频道 | 日韩三级中文字幕 | 夜夜爽天天爽 | 99精品国产成人一区二区 | 97成人精品区在线播放 | 超碰97人 | 福利一区视频 | 久久午夜色播影院免费高清 | av天天澡天天爽天天av | 天天干,天天射,天天操,天天摸 | 久久99精品一区二区三区三区 | 久久手机免费视频 | 久久精品99国产精品酒店日本 | 日韩精品极品视频 | 久久网页 | 99精品黄色 | av手机在线播放 | 免费三级影片 | 在线a亚洲视频播放在线观看 | 国产亚洲精品日韩在线tv黄 | 中文免费在线观看 | 国内精品久久久久影院一蜜桃 | 免费福利在线播放 | av在线免费不卡 | 美女视频是黄的免费观看 | 国产亚洲精品bv在线观看 | 91精品一区二区三区久久久久久 | 免费在线观看av | 日日碰狠狠添天天爽超碰97久久 | 深夜福利视频在线观看 | 00av视频| 亚洲精品美女 | 免费看黄色91 | 在线看成人片 | 狠狠狠色丁香婷婷综合久久五月 | 黄网站a | 国产婷婷在线观看 | 亚洲第一区精品 | 国产精品高潮呻吟久久av无 | 天天色天| 亚洲精品视频大全 | wwxxxx日本| 成年人在线 | 一区二区在线影院 | 日韩欧美成 | 成人国产精品入口 | 免费性网站 | 天天操天天干天天操天天干 | 免费日韩一区二区三区 | 午夜婷婷网 | 国产99在线播放 | 天天干天天拍天天操天天拍 | 人人澡人| 日韩久久精品一区二区 | 香蕉视频色 | 骄小bbw搡bbbb揉bbbb | 亚洲成人第一区 | 午夜久久久精品 | 久久久免费精品国产一区二区 | 成人在线播放网站 | 国产成人高清在线 | 国产一区二区精品久久 | 国产精品你懂的在线观看 | 9999精品视频 | 国产最新在线视频 | 黄色小说在线观看视频 | 97国产在线观看 | 免费观看一级特黄欧美大片 | 综合精品久久久 | 久久久久亚洲精品 | 日日干天天射 | 成人小视频在线观看免费 | 日韩av片无码一区二区不卡电影 | 国产亚洲精品久久久久久移动网络 | 亚洲精品啊啊啊 | 国产日韩在线观看一区 | 精品毛片一区二区免费看 | 国产香蕉av | 久草在线视频国产 | 91久久国产综合精品女同国语 | 亚洲精品视频免费在线观看 | 免费福利片2019潦草影视午夜 | 九九免费在线观看视频 | 久久久久久久免费观看 | www.午夜 | 欧美一级电影免费观看 | 免费高清影视 | 激情六月婷婷久久 | 成人资源在线 | 国产精品高潮在线观看 | 国产精品成人久久久久久久 | 狠狠狠色 | 久久综合久久综合九色 | 国产探花在线看 | 丁香婷婷激情国产高清秒播 | 狠狠色噜噜狠狠 | 国产美女免费看 | 久久国产午夜精品理论片最新版本 | 天天射天天干天天 | 91自拍视频在线观看 | 黄网站污| 国产精品99久久久久久有的能看 | 日韩大片在线观看 | 人人超碰在线 | 久草视频在| 成人av电影免费观看 | 精品国产乱子伦一区二区 | 国产不卡av在线播放 | 日韩久久午夜一级啪啪 | 国产精品96久久久久久吹潮 | 欧美成人在线免费 | www.激情五月.com | 久久黄色美女 | 中文字幕av免费在线观看 | 天堂av观看 | 精品久久久久久综合 | 国产美女免费视频 | 久久亚洲精品电影 | 91天堂素人约啪 | 久久免费av电影 | 最近能播放的中文字幕 | 中文字幕在线第一页 | 999抗病毒口服液 | 香蕉视频4aa | 欧美视屏一区二区 | 日韩av成人在线观看 | 国产精品一区二区av麻豆 | 欧美精品视 | 最近中文字幕在线播放 | 欧美日韩中文字幕视频 | 伊人春色电影网 | 久久蜜桃av| 91亚洲成人| 高清av影院 | 久久人人爽人人片av | 午夜精品久久久99热福利 | 国产精品国产自产拍高清av | 亚洲va欧洲va国产va不卡 | 伊人色综合久久天天网 | aaa亚洲精品一二三区 | 麻豆影视在线观看 | 色瓜| 久久精品国亚洲 | 国产成人中文字幕 | 久久久久免费精品视频 | 在线不卡中文字幕播放 | 免费看一级黄色 | 狠狠色综合网站久久久久久久 | 婷婷激情五月综合 | 91精品久久久久久综合乱菊 | 精品国产乱子伦一区二区 | 中文字幕成人av | 欧美一二三区播放 | 中文字幕国产一区 | 欧美日韩二区三区 | 亚洲首页 | 456成人精品影院 | 日本xxxx裸体xxxx17 | 亚洲成人999| 亚洲美女精品视频 | 91精品无人成人www | 国产黄影院色大全免费 | 精品美女国产在线 | 久久99国产综合精品免费 | 色多多污污 | 久久久久亚洲精品男人的天堂 | 蜜臀av夜夜澡人人爽人人桃色 | 久久夜色精品国产欧美乱极品 | 欧美日韩国产免费视频 | 婷婷视频在线播放 | 精品视频久久 | 丁香六月激情 | 久爱精品在线 | 日韩av一区二区三区 | 国产日产精品一区二区三区四区的观看方式 | 亚洲不卡av一区二区三区 | 国产精品大片在线观看 | 在线看片a| 久久免费99精品久久久久久 | 亚洲精品欧美成人 | 欧美性大战 | 欧美日韩中文国产一区发布 | 日韩精品视频免费专区在线播放 | 色婷婷五| 中文字幕视频 | 国产拍在线 | 国产精品久久久久久久久久免费看 | 国产精品 日韩 欧美 | 国产精品视频地址 | 91免费观看视频网站 | 久久久久久毛片 | 国产精品第十页 | 欧美精品亚洲二区 | 成人av片在线观看 | 99产精品成人啪免费网站 | 三级黄色在线观看 | 欧美午夜a | 成人国产精品免费 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 九九久久久久久久久激情 | 亚洲男模gay裸体gay | 婷婷丁香在线视频 | 久久成人麻豆午夜电影 | 免费在线观看污 | 精品视频99 | 97国产精品亚洲精品 | 91精品国产成| 91精品国产一区 | 亚洲欧洲精品一区二区 | 91麻豆精品91久久久久同性 | 9999国产精品 | 狠狠狠狠狠狠 | 色欧美88888久久久久久影院 | 亚州黄色一级 | 欧美黄色软件 | 国内精品福利视频 | 国产视频在线观看一区 | 91理论片午午伦夜理片久久 | 国产福利av在线 | 一区二区三区中文字幕在线 | 国产五月 | 中文字幕制服丝袜av久久 | 国产一区二区三区视频在线 | 精品国产一区二区三区日日嗨 | 日韩精品视频一二三 | 天天夜夜操| 亚洲免费av一区二区 | 午夜国产在线 | 在线观看中文字幕亚洲 | 久久国产电影院 | 精品美女在线视频 | 98涩涩国产露脸精品国产网 | 国产精品免费麻豆入口 | 亚洲精品男人的天堂 | 精品99免费视频 | 综合久久久久久久 | 视频成人永久免费视频 | av网站在线免费观看 | 精品一区二区三区香蕉蜜桃 | 久久一精品 | 久久国产免费看 | 一级黄色片在线免费看 | 成人全视频免费观看在线看 | 久草电影免费在线观看 | 97免费在线观看 | 日韩国产精品毛片 | 婷婷伊人综合亚洲综合网 | 免费亚洲精品视频 | 日韩三级视频在线观看 | 欧美久久久久久久久久久久久 | 手机在线观看国产精品 | 中文区中文字幕免费看 | 日本三级不卡视频 | 日韩高清片 | 国产精品中文字幕在线观看 | 亚洲国产色一区 | 精品v亚洲v欧美v高清v | 99热这里只有精品国产首页 | 久久久久久久久久久免费 | 日日爽夜夜操 | 日韩深夜在线观看 | 中文字幕人成乱码在线观看 | 国产亚洲午夜高清国产拍精品 | 国产资源在线视频 | 久久草网| 美女黄色网在线播放 | 欧美专区日韩专区 | 久久99精品久久久久久三级 | 亚洲网站在线 | 最近中文国产在线视频 | 黄色小说18 | 97人人超碰在线 | 久久国产精品久久久久 | 久香蕉 | 欧美成人999 | 中文字幕在线观看一区 | 九精品 | av中文字幕在线免费观看 | 中文字幕 国产视频 | 久久久久免费精品视频 | 免费观看性生活大片 | 国产在线视频导航 | 国产中文字幕在线看 | 免费福利在线观看 | 亚洲精品在线一区二区 | 日韩电影中文字幕 | 日本午夜免费福利视频 | 五月激情丁香婷婷 | 成人在线播放免费观看 | 超碰97人| 亚洲乱码国产乱码精品天美传媒 | 久草在线最新免费 | 国产精品9区 | 久久 亚洲视频 | 久久色视频 | 超碰97免费在线 | 欧美一区二区三区在线播放 | 国产午夜一区 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 69av在线播放 | 久久免费的精品国产v∧ | 国产精品日韩久久久久 | 国产高清在线 | 天天操狠狠操网站 | 国产 日韩 在线 亚洲 字幕 中文 | 国产又粗又猛又色又黄视频 | 色综合激情网 | 日日日日| 久久久久久久久国产 | 日韩激情中文字幕 | 91大神精品视频在线观看 | 国产精品久久久久久久久久99 | 伊人五月综合 | 一区二区视频在线免费观看 | 午夜视频在线观看网站 | 成人影音av | 天天曰夜夜操 | 久久只精品99品免费久23小说 | 天天射网 | 中文字幕日韩高清 | www.福利视频| 在线精品国产 | 91热视频在线观看 | 狠狠成人 | av日韩在线网站 | 日韩在线观看网址 | 日韩电影在线一区二区 | 欧美9999| 日韩资源视频 | 免费午夜av| 久久九九国产精品 | 国产精品午夜8888 | 亚洲成人黄色在线观看 | 久久久夜色| 1024在线看片 | 久草视频在线免费播放 | 黄色av一区 | 四虎影视成人永久免费观看视频 | 国产伦理一区 | 国产va饥渴难耐女保洁员在线观看 | 国产黄| 欧美日韩午夜爽爽 | 日韩视频免费观看高清完整版在线 | 午夜国产福利视频 | 亚洲高清久久久 | 日韩亚洲国产中文字幕 | 在线久热 | 啪啪免费观看网站 | 中文字幕视频播放 | 国产精品视频免费观看 | 天堂av在线免费 | 99国内精品久久久久久久 | 在线日本看片免费人成视久网 | 亚洲劲爆av| 国产欧美日韩精品一区二区免费 | 国产在线专区 | 亚洲国产视频a | 国产精品99久久久精品免费观看 | 69久久99精品久久久久婷婷 | 免费在线黄色av | 久久最新 | 日本精品一| 中文字幕在线观看视频一区 | 欧美另类tv | 国产精品一区二区三区免费视频 | 国产手机免费视频 | 天天躁天天狠天天透 | 精精国产xxxx视频在线播放 | 成人高清av在线 | 五月开心综合 | 97超碰在线久草超碰在线观看 | 日韩精品免费一区 | 免费一级特黄录像 | 999久久久欧美日韩黑人 | 精品xxx | 激情婷婷综合网 | 中文字幕超清在线免费 | 91av影视 | 国产一级片直播 | 国产日韩视频在线播放 | 2019精品手机国产品在线 | 国产福利不卡视频 | 在线观看的黄色 | www.97视频 | 亚洲va天堂va欧美ⅴa在线 | 欧美在线观看视频 | 亚洲a网 | 欧美性受极品xxxx喷水 | 视频在线亚洲 | 亚洲国产精品电影在线观看 | 久久五月精品 | 欧美va日韩va | 久久视频这里有久久精品视频11 | 免费毛片一区二区三区久久久 | 亚洲 欧洲 国产 精品 | 婷婷中文字幕在线观看 | 天天草天天 | 超碰97免费在线 | 免费av网站观看 | 国产成人一区二区精品非洲 | 成 人 黄 色 视频 免费观看 | 中文字幕电影在线 | 免费视频在线观看网站 | 手机av片 | 亚洲jizzjizz日本少妇 | 成人av影视 | 91在线91| 免费网站看v片在线a | 伊人六月 | 精品国产一区二区三区日日嗨 | 成人一级片在线观看 | 亚洲一级在线观看 | 成人免费视频网站在线观看 | 天天射网站 | 一区二区三区四区五区在线视频 | 国产99久久99热这里精品5 | 国产成人av综合色 | 国产特级毛片 | 天天天干天天射天天天操 | 国产九色91| 日韩av资源站| 免费日韩视频 | 久久av黄色| 久久综合欧美精品亚洲一区 | 久草视频在线新免费 | 亚洲春色奇米影视 | 国产精品九九九九九 | 久久夜夜夜 | 久久精品99久久 | a天堂一码二码专区 | 又黄又爽又无遮挡的视频 | av大片免费在线观看 | 国产一二区视频 | 五月开心婷婷网 | 国产成人av在线影院 | 国色天香av | 国产亚洲精品电影 | 中文字幕在线观看完整 | 91福利试看 | 国产一区二区不卡在线 | 久久污视频 | 亚洲涩涩色| 国产中文字幕三区 | 三级av片 | 五月婷婷天堂 | 午夜精品中文字幕 | 国产成人精品a | 国产精品久久久久av | 久久精品三| 色九九影院| 国产人成看黄久久久久久久久 | 久草久| 99精品视频在线观看播放 | 久草视频中文在线 | 成人9ⅰ免费影视网站 | 国产精品视频区 | 一级电影免费在线观看 | 97色在线观看免费视频 | 揉bbb玩bbb少妇bbb | 在线国产日韩 | 中文字幕在线看视频国产中文版 | 人人爱人人爽 | 玖玖在线视频观看 | 久久久久久久久免费 | 人人舔人人舔 | 97福利 | 久久a久久 | 91视频免费网址 | 很黄很黄的网站免费的 | 九色精品免费永久在线 | av永久网址 | 玖玖在线看| 国产精品久久久久永久免费看 | 婷婷色资源 | 国产成人一二片 | 亚洲一级电影在线观看 | 天天av综合网 | 99久久久免费视频 | 久久精品综合一区 | 免费h在线观看 | 亚洲最大在线视频 | av天天澡天天爽天天av | 在线观看日韩中文字幕 | 六月丁香婷婷网 | 9i看片成人免费看片 | 天天操天天操 | 亚洲欧美视频 | 久久视频在线免费观看 | 一二三久久久 | 精品国产日本 | 国产精品久久久久久久久蜜臀 | 91av视频观看 | 永久免费的啪啪网站免费观看浪潮 | 国产小视频福利在线 | 91视频一8mav | 国产一区av在线 | 99精品系列 | 欧美极品一区二区三区 | a电影免费看 | 日本超碰在线 | 91视频在线国产 | 色在线视频 | 在线观看中文字幕av | 国产精品久久久久久久久久久杏吧 | 黄色一级在线观看 | japanesexxxhd奶水 91在线精品一区二区 | 美女网色| 中文字幕av在线免费 | 夜夜操天天干, | 国产色网站 | 在线午夜av | 国产在线观看地址 | 91精品免费视频 | 玖草影院 | 美腿丝袜一区二区三区 | 91精品国产乱码久久桃 | 久久久久国产精品一区二区 | 久久精品视频在线 | 久久综合操 | 亚洲不卡av一区二区三区 | 99精品在线看 | 91在线视频导航 | 久久久久久国产精品 | 成人午夜在线电影 | 国产三级久久久 | 国产精品九九热 | 国产精品女教师 | 特级西西444www高清大视频 | www.亚洲视频.com | 天天婷婷 | 麻豆91小视频 | 91av免费在线观看 | 久久天堂精品视频 | 麻豆视频在线免费看 | 色999精品 | 久草在线免费播放 | 欧美一二三在线 | 婷婷中文字幕在线观看 | 午夜性盈盈 | 久久福利剧场 | 国产一二区免费视频 | 亚洲专区在线视频 | 欧美一级片在线观看视频 | 中文字幕一区三区 | 亚洲精品国产自产拍在线观看 | 黄av免费| 亚洲成人xxx | 成人小视频在线免费观看 | 三级av在线 | 国产精品日韩在线 | 久草www | 国产精品资源网 | 亚洲国产精品第一区二区 | 超碰人人在 | 黄色aa久久 | 在线观看久草 | 97视频人人澡人人爽 | 韩国精品福利一区二区三区 | 中文字幕在线观看2018 | 2017狠狠干| 青青草国产在线 | 99久久精品免费看国产四区 | 日韩爱爱网站 | 国产精品你懂的在线观看 | 91视频高清免费 | 69国产精品视频 | 国产精品视频永久免费播放 | 国产成人精品一区二区在线观看 | 99热这里是精品 | 麻花豆传媒mv在线观看网站 | 日韩精品免费一区二区三区 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 91九色在线视频 | 久久综合九色 | 99精品欧美一区二区三区黑人哦 | 一区二区三区四区五区在线视频 | 中文国产在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | www.夜夜操.com | 婷婷丁香五| 99草视频 | 性日韩欧美在线视频 | av免费在线观 | 国语自产偷拍精品视频偷 | aaa毛片视频 | 久久视频免费 | 日本乱视频 | 日韩中文字幕a | 天天操天天综合网 | 久久久影片 | 天天综合入口 | 在线观看视频三级 | 五月婷婷在线视频观看 | 91看片在线免费观看 | 亚洲天堂网在线视频观看 | 黄网站app在线观看免费视频 | 69国产成人综合久久精品欧美 | 国产玖玖在线 | 久久激情视频免费观看 | 麻豆视频免费看 | 丁香花在线视频观看免费 | 亚洲精品午夜久久久久久久 | 亚洲 中文 在线 精品 | 综合国产视频 | 黄色一集片 | 精品国产诱惑 | 狠狠色丁香婷婷综合久久片 | 一级成人免费 |