php mvc实现比赛列表

PHP MVC框架解析
本文深入解析了一个基于PHP的MVC框架实现,详细介绍了入口文件、控制器、模型、视图及工厂模式的应用,展示了如何通过自动加载机制组织代码,以及如何使用工厂模式实现模型的单例模式。

文件创建样式:

new_file.php是入口文件,代码为:

<?php
//入口文件 被浏览器访问的
spl_autoload_register('userAutoload');  //注册自动加载函数  自动加载函数不用主动调用 在需要的时候自动调用
function userAutoload($classname){
    //定义确定的类和路径
    $class_list = array(
    'Controller' => FRAMEWORK_PATH.'Controller.class.php',
    'Factory' => FRAMEWORK_PATH.'Factory.class.php',
    'Model' => FRAMEWORK_PATH.'Model.class.php',
    'MySQLDB' => FRAMEWORK_PATH.'MySQLDB.class.php'
    );
    if(isset($class_list[$classname])){
        require $class_list[$classname];
    }elseif(substr($classname, -10) == 'Controller'){  //判断是否为控制器
        require CONREOLLER_PATH.$classname.'.class.php';
    }elseif(substr($classname, -5) == 'Model'){  //判断是否为模型类
        require MODEL_PATH.$classname.'.class.php';
    }
}
//目录地址常量
define('ROOT_PATH', getcwd().'/');  //定义根目录
define('APP_PATH',ROOT_PATH.'application/');
define('FRAMEWORK_PATH',ROOT_PATH.'framework/');


//控制器类
$c = isset($_GET['c']) ? $_GET['c'] : 'Match';
define("PLATFORM", isset($_GET['p']) ? $_GET['p'] : 'test');

//动作
$default_action = 'list';  //默认值
$a = isset($_GET['a']) ? $_GET['a'] : $default_action;

//平台相关路径常量
define('CONREOLLER_PATH', APP_PATH.PLATFORM.'/controller/');
define('MODEL_PATH', APP_PATH.PLATFORM.'/model/');
define('VIEW_PATH', APP_PATH.PLATFORM.'/view/');


//调用控制器
$controller = $c.'Controller';

//实例化对象
$Match = new $controller();

$action = $a.'Action';
$Match->$action();

不传参数时p默认为tese c默认为Match a默认为list

实例化一个MatchController对象

MatchController类代码为:

<?php
class MatchController extends Controller{
    function listAction(){
    //查询数据
    
    $match = Factory::getDx('MatchModel'); //用工厂类实例化MatchModel类对象
    //$match = new MatchModel();
    $arr = $match->getList();
    //调用模板
    require VIEW_PATH.'match_v.html';
    }
    function delAction(){
        $id = $_GET['id'];
        echo "id是:".$id."<br />";
        echo "比赛控制器的删除动作执行了";
//        header('location:new_file.php');
    }
}

调用MatchController父类Controller(基础控制器)的构造函数

 

<?php
//基础控制器
class Controller{
    function __construct(){
        $this->_initContentType();
    }
    function _initContentType(){
        header('Content-Type:text/html; charset=utf-8');
    }
    
    protected function _jump($url,$info=null,$wait=3){
        if($info == ''){
            header('location:'.$url);
        }else{
            header('refresh:'.$wait.';url='.$url);
            echo $info;
        }
        die;
    }
}

 

调用Factory类getDx方法实例化一个MatchModel对象:

<?php
//工厂类
class Factory{
    /*判断模型对象有没有 有就直接返回 没有就new一个
    $model_list = array(
        'MatchModel' => new MatchModel()  键是类名,值是这个类的一个对象
    )*/
    static function getDx($className){  //$className可变类名
        static $model_list = array();
        if(!isset($model_list[$className])){
            
            $model_list[$className] = new $className;
        }
        return $model_list[$className];
    }
}

工厂类的作用就是单例模型类,传入类名,返回对象

 

引入MatchModel类,继承Model(基础模型类),当new一个对象的时候,调用Model的构造函数,连接数据库,单例话一个MySQLDB对象存在$this->_dao中,MatchModel对象调用MatchModel方法,执行sql语句,调用视图层显示在页面上:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <table width="100%" border="1" cellpadding="0" cellspacing="0">
            <tr>
                <th>队伍一</th>
                <th>比分</th>
                <th>队伍二</th>
                <th>时间</th>
            </tr>
            <!--循环遍历-->
            <?php foreach($arr as $v){ ?>
                <tr>
                    <td><a href="new_file.php?c=Team&a=list&id=1&tname=<?php echo $v['t1_name']; ?>"><?php echo $v['t1_name']; ?></a></td>
                    <td><?php echo $v['t1_score'].':'.$v['t2_score']; ?></td>
                    <td><?php echo $v['t2_name']; ?></td>
                    <td><?php echo date('Y-m-d H:i:s',$v['m_time']); ?></td>
                    <td><a href="new_file.php?a=del&id=1">删除</a></td>
                </tr>
            <?php } ?>    
        </table>
    </body>
</html>

 

转载于:https://www.cnblogs.com/liangdong/p/10409166.html

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值