php视图处理类

#简介

  • 视图模版替换
  • 支持变量,for循环,foreach循环,if判断,if else判断

#调用

  1. index.php
    <?php
    use ppt\tool\View;
    $haha = 12;
    $id = 111;
    $arr = ['x','y',3];
    $pp = [
        'x'=>['id'=>'1','name'=>'12'],
        'y'=>['id'=>'1','name'=>'12'],
        'z'=>['id'=>'1','name'=>'12'],
    ];
    echo View::display('',['haha'=>$haha,'id'=>$id,'arr'=>$arr,'pp'=>$pp,]);
    echo '123456';
    
    
    
  2. index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {if($id===1)}
    1
    {/if}
    {else if($id===2)}
    2
    {/else if}
    {else}
    other
    {/else}
    {foreach($arr as $item)}
    {$item}
    {/foreach}
    </body>
    </html>

输出tmp.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<?php if(($id===1)){ ?>
1
<?php } else if($id===2){ ?>
2
<?php } else { ?>
other
<?php } foreach($arr as $item){ echo $item; } ?>
</body>
</html>

#代码View.php

<?php

namespace ppt\tool;
class View
{
    private static $tpl_path = app . '/html/';
    private static $ext = '.html';

    public static function display($_tpl = '', $_param = [])
    {
        if (!empty($_param)) {
            foreach ($_param as $_key => $_v) {
                $$_key = $_v;
            }
        }
        if (empty($_tpl)) {
            $_pff = '';
            if (!empty(debug_backtrace()[1]['function']))
                $_pff = debug_backtrace()[1]['function'];
            $_pf = debug_backtrace()[0]['file'];
            $_pf = str_replace('\\', '/', $_pf);
            $_pf = str_replace([app . '/code', '.php'], '', $_pf);
            $_tpl = strtolower($_pf);
        }
        $_file1 = self::$tpl_path . $_tpl . self::$ext;
        $_file2 = self::$tpl_path . 'tmp' . self::$ext;
        if (!is_file($_file1)) {
            $_msg = 'error: 文件' . __FILE__ . ' 第' . __LINE__ . '行 函数' . __FUNCTION__ . ' file【' . $_file1 . '】不存在';
            echo $_msg;
            exit();
        }
        $_html = file_get_contents($_file1);
        $_content = self::biuBiu($_html);
        file_put_contents($_file2, $_content);
        ob_start();
        require_once $_file2;
        $_res = ob_get_clean();
        unlink($_file2);
        return $_res;
    }

    public static function biuBiu($tpl)
    {
        $content = self::fanyiIf($tpl);
        $content = self::fanyiElse($content);
        $content = self::fanyiXunhuan($content);
        $content = self::fanyiBianliang($content);
        $content = self::biaoqianQuchon($content);
        return $content;
    }
    private static function biaoqianQuchon($tpl)
    {
        $pattern = "/[\s]*\?\>[\s]*\<\?php /U";
        preg_match_all($pattern, $tpl, $res);
        if (!empty($res)) {
            foreach ($res[0] as $item) {
                $tpl = str_replace($item, ' ', $tpl);
            }
        }
        return $tpl;
    }

    private static function fanyi($tpl,$preg,$replace_preg,$replace_arr)
    {
        preg_match_all($preg, $tpl, $res);
        if (!empty($res)) {
            $res_p = $res[0];
            foreach ($replace_preg as $pk=>$pv){
                $res_p = preg_replace($pk,$pv,$res_p);
            }
            foreach ($replace_arr as $ak=>$av){
                $res_p = str_replace($ak,$av,$res_p);
            }
            foreach ($res[0] as $key => $item) {
                $tpl = str_replace($item, $res_p[$key], $tpl);
            }
        }
        return $tpl;
    }

    private static function fanyiElse($tpl)
    {
        $tpl = self::fanyiElse_head($tpl);
        $tpl = self::fanyiElse_end($tpl);
        return $tpl;
    }

    private static function fanyiElse_head($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*else[\s\S]*[\s]*\}/U',['/[\s]+/'=>'', '/\{else/U'=>'<?php else ', '/\}/U'=>'{ ?>'],[]);
    }

    private static function fanyiElse_end($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*\/[\s]*else[\s\S]*[\s]*\}/U',['/[\s]+/'=>'', '/{\/else[\s\S]*\}/U'=>'<?php } ?>',],[]);
    }

    private static function fanyiIf($tpl)
    {
        $tpl = self::fanyiIf_head($tpl);
        $tpl = self::fanyiIf_end($tpl);
        return $tpl;
    }

    private static function fanyiIf_head($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*if[\s\S]*[\s]*\}/U',['/[\s]+/'=>'',],['{if'=>'<?php if(', '}'=>'){ ?>',]);
    }

    private static function fanyiIf_end($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*\/[\s]*if[\s]*\}/',['/[\s]+/'=>'',],['{/if}'=>'<?php } ?>',]);
    }

    private static function fanyiBianliang($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*\$[\S]+[\s]*\}/U',['/[\s]+/'=>'',],['{'=>'<?php echo ', '}'=>'; ?>',]);
    }

    private static function fanyiXunhuan($tpl)
    {
        $tpl = self::fanyiXunhuan_head($tpl);
        $tpl = self::fanyiXunhuan_end($tpl);
        return $tpl;
    }

    private static function fanyiXunhuan_head($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*for[\s\S]*[\s]*\}/U',['/[\s]+/'=>' ', '/\{[\s]+/U'=>'{', '/[\s]+\}/U'=>'}',],['{for'=>'<?php for', '}'=>'{ ?>',]);
    }

    private static function fanyiXunhuan_end($tpl)
    {
        return self::fanyi($tpl,'/\{[\s]*\/[\s]*for[\s\S]*[\s]*\}/U',['/[\s]+/'=>'', '/\{\/for[\s\S]*\}/'=>'<?php } ?>',],[]);
    }
}

#终结

  • 简单几十枚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/571635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果&#xff0c;这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…

基于uni-app的动态表单

一、应用场景和意义 可以通过配置字段和校验规则&#xff0c;快速完成页面开发、提升开发效率 二、应用前提 形成ui/业务规范&#xff0c;最好是应用在问卷调查之类的业务 三、动态表单的功能 字段报错、快速滚动定位报错信息、支持字段值和字段规则拆分&#xff0c;便于实…

Linux安装Matlab运行时

一般而言&#xff0c;安装Matlab的linux系统是带桌面版的&#xff0c;如果没带&#xff0c;不在本教程范围内。 一、下载Matlab 下载地址&#xff1a;MATLAB Runtime - MATLAB Compiler - MATLAB 本教程使用R2020b(9.9) 二、linux系统中进行解压 将zip传入linux系统&#xf…

微电子领域常见概念(八)靶材

微电子领域常见概念&#xff08;八&#xff09;靶材 靶材是用于物理气相沉积&#xff08;PVD&#xff09;技术中的一种关键材料&#xff0c;它在制备薄膜的过程中起到至关重要的作用。PVD技术包括多种不同的工艺&#xff0c;如磁控溅射、离子束溅射、分子束外延&#xff08;MBE…

Vue:vue的工程化

Vue前端工程化 前后端分离开发 即前端人员开发前端工程,将开发好的前端工程打包部署在前端服务器上 后端开发人员开发后端工程,再将后端工程打包部署在后端服务器上,这种模式称为前后端分离开发 而前后端要顺利对接的关键就是要遵循一定的开发规范 开发规范 这种开发规范定…

CCF区块链会议--Middleware 2024 截止5.24 附录用率

会议名称&#xff1a;Middleware CCF等级&#xff1a;CCF B类会议 类别&#xff1a;软件工程/系统软件/程序设计语言 录用率&#xff1a;2022年录用率38%&#xff08;8/21&#xff09; Topics of Interest The Middleware conference seeks original submissions of resear…

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux&#xff0c; Apache&#xff0c; MySQL&#xff0c; PHP组成的&#xff0c;即把Apache、MySQL以及PHP安装在Linux系统上&#xff0c;组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

科技赋能无人零售

科技赋能无人零售&#xff0c;使其具备以下独特优势&#xff1a; 1. 全天候无缝服务 &#xff1a;无人零售店依托科技&#xff0c;实现24小时不间断运营&#xff0c;不受人力限制&#xff0c;满足消费者随时购物需求&#xff0c;尤其惠及夜间工作者、夜猫子及急需购物者&…

微前端是如何实现作用域隔离的?

微前端是如何实现作用域隔离的&#xff1f; 一、前言 沙箱&#xff08;Sandbox&#xff09;是一种安全机制&#xff0c;目的是让程序运行在一个相对独立的隔离环境&#xff0c;使其不对外界的程序造成影响&#xff0c;保障系统的安全。作为开发人员&#xff0c;我们经常会同沙…

03-JAVA设计模式-访问者模式

访问者模式 什么是访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是软件设计模式中的一种行为模式&#xff0c;它用于将数据结构中的元素与操作这些元素的操作解耦。这种模式使得可以在不修改数据结构的情况下添加新的操作。 在访问者模式中&#xff0c;我们…

PHP+MYSQL多条件选一通用搜索系统功能单文件7KB

通用功能: 快速填写参数用于自己的mysql数据表搜索,ajax载入数据 <?php header("content-Type: text/html; charsetUTF-8"); //error_reporting(0);$dbhost "localhost"; //数据库地址本地localhost $dbuser "chalidecom"; //数据库账号 …

Tkinter是什么?

Tkinter是Python标准库中的一个模块&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;应用程序。它提供了一组工具和组件&#xff0c;使开发者能够在Python中创建窗口、按钮、标签、文本框、菜单等各种界面元素&#xff0c;并通过这些元素构建交互式的用户界面。 T…

稀碎从零算法笔记Day59-LeetCode: 感染二叉树需要的总时间

题型&#xff1a;树、图、BFS、DFS 链接&#xff1a;2385. 感染二叉树需要的总时间 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟…

Three.js入门学习笔记

学习资料&#xff1a; 【Three.js】Three.js快速上手教程_three.module.js-CSDN博客 2024年了&#xff0c;是该学学Three.js了_three.js 2024-CSDN博客 一、three.js简介 three.js是JavaScript编写的WebGL第三方库。 three.js&#xff0c;webGL&#xff0c;openGL三者的关…

微信小程序4~6章总结

目录 第四章 页面组件总结 4.1 组件的定义及属性 4.2 容器视图组件 4.2.1 view 4.2.2 scroll-view 4.2.3 swiper 4.3 基础内容组件 4.3.1 icon ​编辑 4.3.2 text 4.3.3 progress ​编辑 4.4 表单组件 4.4.1 button 4.4.2 radio 4.4.3 checkbox 4.4.4 switch …

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考&#xff1a;https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 长文本通知测试 多行文本通知测试 图片通知测试 进度条通知测试 通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、…

L1-099 帮助色盲 - java

L1-099 帮助色盲 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 题目描述&#xff1a; 在古老的红绿灯面前&#xff0c;红绿色盲患者无法分辨当前亮起的灯是红色还是绿色&#xff0c;有些聪明人通过路口的策略是这样的&#xff1a;当红灯或绿灯亮起时&am…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…

数据可视化-ECharts Html项目实战(14)

在之前的文章中&#xff0c;我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Html项目实战&#xff08;…
最新文章