php MVC
Posted h0000dh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php MVC相关的知识,希望对你有一定的参考价值。
-- 比赛 create table `match` ( m_id int unsigned primary key auto_increment, t1_id int unsigned comment \'球队一ID\', t2_id int unsigned comment \'球队二ID\', t1_score int comment \'球队一进球\', t2_score int comment \'球队二进球\', m_time int comment \'比赛时间 时间戳\' )charset=utf8; insert into `match` values (null, 3, 4, 1, 2, unix_timestamp(\'2015-01-31 17:00:00\')), (null, 1, 2, 2, 3, unix_timestamp(\'2015-01-30 17:00:00\')), (null, 4, 2, 2, 0, unix_timestamp(\'2015-01-27 17:00:00\')), (null, 3, 1, 2, 0, unix_timestamp(\'2015-01-26 17:00:00\')), (null, 5, 4, 0, 2, unix_timestamp(\'2015-01-22 18:30:00\')), (null, 8, 5, 0, 1, unix_timestamp(\'2015-01-10 17:00:00\')), (null, 5, 7, 2, 1, unix_timestamp(\'2015-01-14 17:00:00\')), (null, 5, 6, 2, 1, unix_timestamp(\'2015-01-18 17:00:00\')); -- 球队 create table `team` ( t_id int unsigned primary key auto_increment, t_name varchar(20) )charset=utf8; insert into `team` values (1, \'伊拉克\'), (2, \'阿联酋\'), (3, \'韩国\'), (4, \'澳大利亚\'), (5, \'中国\'), (6, \'朝鲜\'), (7, \'乌兹别克斯坦\'), (8, \'沙特\'); -- 运动员 create table `player` ( p_id int unsigned primary key auto_increment, p_name varchar(20), t_id int unsigned comment \'球队ID\' )charset=utf8; insert into `player` values (null, \'张琳芃\', 5),(null, \'郜林\', 5),(null, \'孙可\', 5),(null, \'王大雷\', 5),(null, \'吴曦\', 5) ,(null, \'于海\', 5); select * from `match` ; select t1.t_name, m.t1_score, m.t2_score, m.t2_id, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id; select t1.t_name, m.t1_score, m.t2_score, t2.t_name, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id left join `team` as t2 ON m.t2_id=t2.t_id; select t1.t_name as t1_name, m.t1_score, m.t2_score, t2.t_name as t2_name, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id left join `team` as t2 ON m.t2_id=t2.t_id;
./Factory.class.php
<?php /** * 项目中的工厂类 */ class Factory { /** * 生成模型的单例对象 * * @param $model_name string * @return object */ public static function M($model_name) { static $model_list = array();//存储已经实例化好的模型对象的列表,下标模型名,值模型对象 //判断当前模型是否已经实例化 if(!isset($model_list[$model_name])) { //没有实例化过 require \'./\' . $model_name . \'.class.php\'; $model_list[$model_name] = new $model_name;//可变标志符,可变类 } return $model_list[$model_name]; } }
./match_list_c.php
<?php # 比赛列表 date_default_timezone_set(\'PRC\'); header(\'Content-Type: text/html; charset=utf-8\'); // 实例化相应的模型类对象,调用某个方法,实现固定功能 // require \'./MatchModel.class.php\'; // $m_match = new MatchModel(); //通过工厂获得对象 require \'./Factory.class.php\'; $m_match = Factory::M(\'MatchModel\'); $match_list = $m_match->getList(); // $m_match2 = Factory::M(\'MatchModel\'); // 载入负责显示的html文件 require \'./template/match_list_v.html\';
./MatchModel.class.php
<?php /** * match表的操作模型类 */ require_once \'./Model.class.php\'; class MatchModel extends Model { /** * 获得所有的比赛列表 */ public function getList() { //获得比赛列表数据 $sql = "select t1.t_name as t1_name, m.t1_score, m.t2_score, t2.t_name as t2_name, m.m_time from `match` as m left join `team` as t1 ON m.t1_id = t1.t_id left join `team` as t2 ON m.t2_id=t2.t_id;"; return $this->_dao->getAll($sql); } /** * 删除某场比赛 */ public function removeMatch($m_id) { $sql = "delete from `match` where m_id=$m_id"; return $this->_dao->query($sql); } public function rmTeam($t_id) { return $this->_dao->query("delete from `team` where t_id = $t_id"); } }
./Model.class.php
<?php /** * 基础模型类 */ class Model { protected $_dao;//存储DAO对象的属性,可以在子类方法中被访问,使用DAO对象 /** * 初始化DAO */ protected function _initDAO() { //初始化mysqlDB $config = array(\'host\' => \'127.0.0.1\', \'port\' => \'3306\', \'username\'=>\'root\', \'password\' => \'h0000dh@\', \'charset\'=>\'utf8\', \'dbname\'=>\'itcast\'); require_once \'./MySQLDB.class.php\'; $this->_dao = MySQLDB::getInstance($config);//$dao , Database Access Object 数据库操作对象(dao层) } /** * 构造方法 */ public function __construct() { // 初始化DAO $this->_initDAO(); } }
./MySQLDB.class.php
<?php //类名,也习惯上(推荐)使用跟文件名相似的名字 //定义一个mysql连接类,该类可以连接mysql数据库 //并实现其单例模式 //该类的功能还能够完成如下基本mysql操作: //执行普通的增删改非返回结果集的语句 //执行select语句并可以返回3种类型的数据: //多行结果(二维数组),单行结果(一维数组) //单行单列(单个数据) class MySQLDB{ public $host; public $port; public $username; public $password; public $charset; public $dbname; //连接结果(资源) private static $link; private $resourc; public static function getInstance($config){ if(!isset(self::$link)){ self::$link = new self($config); } return self::$link; } //构造函数:禁止new private function __construct($config){ //初始化数据 $this->host = isset($config[\'host\']) ? $config[\'host\'] : \'localhost\'; $this->port = isset($config[\'port\']) ? $config[\'port\'] : \'3306\'; $this->username = isset($config[\'username\']) ? $config[\'username\'] : \'root\'; $this->password = isset($config[\'password\']) ? $config[\'password\'] : \'\'; $this->charset = isset($config[\'charset\']) ? $config[\'charset\'] : \'utf8\'; $this->dbname = isset($config[\'dbname\']) ? $config[\'dbname\'] : \'\'; //连接数据库 $this->connect(); //设定连接编码 $this->setCharset($this->charset); //选定数据库 $this->selectDb($this->dbname); } //禁止克隆 private function __clone(){} //这里进行连接 public function connect(){ $this->resourc = mysql_connect("$this->host:$this->port", "$this->username","$this->password") or die("连接数据库失败!"); } public function setCharset($charset){ mysql_set_charset($charset, $this->resourc); } public function selectDb($dbname){ mysql_select_db($dbname, $this->resourc); } /** * 功能:执行最基本(任何)sql语句 * 返回:如果失败直接结束,如果成功,返回执行结果 */ public function query($sql){ if(!$result = mysql_query($sql, $this->resourc)) { echo ("<br />执行失败。"); echo "<br />失败的sql语句为:" . $sql; echo "<br />出错信息为:" . mysql_error(); echo "<br />错误代号为:" . mysql_errno(); die(); } return $result; } /** * 功能:执行select语句,返回2维数组 * 参数:$sql 字符串类型 select语句 */ public function getAll($sql){ $result = $this->query($sql); $arr = array(); //空数组 while( $rec = mysql_fetch_assoc( $result )){ $arr[] = $rec;//这样就形成二维数组 } return $arr; } //返回一行数据(作为一维数组) public function getRow($sql){ $result = $this->query($sql); //$rec = array(); if( $rec2 = mysql_fetch_assoc( $result )){//返回下标为字段名的数组 //如果fetch出来有数据(也就是取得了一行数据),结果自然是数组 return $rec2; } return false; } //返回一个数据(select语句的第一行第一列) //比如常见的:select count(*) as c from XXX where ... public function getOne($sql){ $result = $this->query($sql); $rec = mysql_fetch_row($result);//返回下标为数字的数组,且下标一定是0,1,2, 3..... //如果没有数据,返回false if($result === false){ return false; } return $rec[0]; //该数组的第一项。 } }
./template/.htaccess
Deny from All
./template/match_list_v.html
<!-- 模板文件,利用HTML代码展示数据 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>比赛列表</title> </head> <body> <table> <tr> <th>球队一</th><th>比分</th><th>球队二</th><th>时间</th> </tr> <?php foreach($match_list as $row) : ?> <tr> <td><?php echo $row[\'t1_name\'];?></td> <td><?php echo $row[\'t1_score\'];?>:<?php echo $row[\'t2_score\'];?></td> <td><?php echo $row[\'t2_name\'];?></td> <td><?php echo date(\'Y-m-d H:i\', $row[\'m_time\']);?></td> </tr> <?php endForeach;?> </table> </body> </html>
以上是关于php MVC的主要内容,如果未能解决你的问题,请参考以下文章