博客列表 >1015 使用类的静态方法 自动加载 视图页面的小案例,20191015 2000-2200

1015 使用类的静态方法 自动加载 视图页面的小案例,20191015 2000-2200

没有人的夏天的博客
没有人的夏天的博客原创
2019年10月27日 14:09:07832浏览

使用类的静态方法 根据get 值  自动加载页面遇到的几个问题:

1.首先要注意引用不同路径下文件的方法

在mvc框架中,不同功能的文件放在不同的路径下,就会触发文件交叉引用的情况。

也就是说,在c路径下的文件引用了m路径下的文件,而m路径下的文件又动态引用了v路径下文件。

需要在include时加入当前文件路径信息,可以把有效的文件加载进来。否则会提示无法找到文件。

解决方案:

include dirname(__FILE__) . '/***.php';

2. 使用类进行自动加载页面,会引发变量及方法的作用域问题

也就是说在c路径下文件,调用v路径下的方法 ,而使用m路径下文件中的变量 

虽然都引用到了当前文件中,但不同类中的变量及方法还存在工作域的问题。

解决方案:

在发起调用的方法中引入inculde 包含参数及其它方法的文件,而不是在类外引入。

案例: 根据php原生mvc框架 设计 类静态方法自动加载页面案例

入口文件: index.php  更改如下

  • <!-- 加载公开信息  -->
    <?php include 'controller/title.php' ?> 
    <!--加载公共头部-->
    <?php include 'view/inc/header_inc.php'; ?>
    <!-- 加载页面模板 -->
    <?php include 'controller/config.php'; ?>
    <!--加载公共底部-->
    <?php include 'view/inc/footer_inc.php' ?>

加载页面文件:config.php 更改如下

  • <?php
    //开启session
    session_start();
    // 判断是否登录 //未登录的情况下给一个login页面
    if (!isset($_SESSION['user'])) {
        loadget::login();
    } else {
        // 判断get是否为空 空值进入 index页面
        $getname = isset($_GET['a']) ? $_GET['a'] : 'index';
        // 判断已登录情况下get是否为login,是login则进入index页面
        $getname = $getname == 'login' ? 'index' : $getname;
        // 静态调用页面
        loadget::$getname();
    }
    // 页面加载类
    class loadget
    {
        static function login()
        {
            //包含参数信息及方法库的文件在loginAction.php文件内引入,而且不是在类的外部引入
            include dirname(__FILE__) . '/loginAction.php';
        }
        static function index()
        {
            include dirname(__FILE__) . '/indexAction.php';
        }
        static function user()
        {
            include dirname(__FILE__) . '/userAction.php';
        }
        static function video()
        {
            include dirname(__FILE__) . '/videoAction.php';
        }
        // logout或get非特定值会退出
        static function __callStatic($a, $b)
        {
            //关闭session 进入loging页面
            session_destroy();
            include dirname(__FILE__) . '/loginAction.php';
        }
    }

login文件 :loginAction.php 更改部分  其它未做更改

  • <?php
    //0.加载参数文件
    include dirname(__FILE__) . '/conf.php';
    //1.加载函数库文件
    include dirname(__FILE__) . '/function_pdo.php';

       其它未做更改,最后一行加入以下代码

  • //设置传入参数值
    $list = '';
    $page = '';
    //4. 加载模版,加入变量做为参数带入到function_pdo.php的auto_load_tpl方法中
    auto_load_tpl($tplName, $list, $page);

方法库文件:function_pdo.php 更改部分 其它未做更改

  • <?php
    function auto_load_tpl($tplName, $list, $page)
    {    
        //加载模板,$list, $page 会带入到 $tplName.php 中 
        //dirname(dirname(__FILE__)) 会返回到上级目录中
        include dirname(dirname(__FILE__)) . '/view/tpl/' . $tplName . '.php';
    }

登录页面 login.tpl.php  未做更改

登录后的首页调用文件 的更改部分 indexAction.php  其它未做更改

  • <?php
    //0.加载参数文件
    include dirname(__FILE__) . '/conf.php';
    //1.加载函数库文件
    include dirname(__FILE__) . '/function_pdo.php';

        其它未做更改,最后一行加入以下代码

  • //4. 加载模版,加入变量做为参数带入到function_pdo.php的auto_load_tpl方法中
    auto_load_tpl($tplName, $list, $page);

登录后首页文件 index_tpl.php  未做更改


登录页面效果截图  根据get 值 加载页面

  • TIM截图20191027135631.pngTIM截图20191027135631.png

登录后首页效果截图 根据get 值 加载页面

  • TIM截图20191027135707.png


明星页面效果截图 根据get 值 加载页面

  • TIM截图20191027135739.png


退出及其它get值效果截图 根据get 值 加载页面

  • TIM截图20191027135808.png


  • TIM截图20191027140432.png

上一条:20191023作业下一条:20191022作业
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议