用php生成HTML文件的类
目的
用PHP生成HTML文档, 支持标签嵌套缩进, 支持标签自定义属性
起因
这个东西确实也是心血来潮写的, 本来打算是输出HTML片段用的, 但后来就干脆写成了一个可以输出完整HTML的功能;
我很满意里边的实现缩进的机制, 大家有用到的可以看看
p.s. 现在都是真正的前后端分离了(vue, nodejs, webpack...), 这个东西喜欢就用, 不喜欢就算了~
支持的标签
html, head, meta, title, body, input, select/option, form, table, div, 注释, 以及 自定义标签(成对出现的标签), 还有一大堆属性(在下边有介绍)
实现
整体
- 每个标签都对应一个类, 比如 标签<html>, 对应了一个叫html的类
- 标签中有用到的属性, 我都放到了一个类中了, 并提供了方法去获取赋了值的属性
嵌套缩进
每个标签我都设计了一个类, 比如 table 标签, 就有一个叫table的类与之对应
每个类里边一般都有以下3个重要成员:
- 本标签的缩进值
- 输出本标签最终字符串的方法, out()
- 给本标签添加子标签的方发, append()
其中append()接收的是子标签的对象, 在最终调用$html->out()的时候, 每个子标签对象里的out()方法会被依次调用, 缩进值也会从上层类传递到最下层类并累加;
另外, 每个类都包含了属性类(calss attribute ), 每个类的缩进值是从属性类里继承而来的, 所以如果修改了属性类里的缩进量, 所有类的缩进量就跟着改变了
你也可以给标签类添加一个自己的缩进值来覆盖统一的缩进值
属性
我这里的方案是定义一个类(calss attribute ), 里边有
- 标签可能拥有的属性
- 对应的setXxx方法
- 组装非空的属性拼成字符串的方法
- 为了不影响下次显示, 会有专门的清空方法, 把之前赋值的属性都清空
这样的话, 在定义标签属性的时候, 需要的就赋上值, 不需要的不赋值就不会在最终的HTML代码中显示出来
源码
地址: 码云 看其中的test.php文件,是介绍他的用法
原文地址:https://segmentfault.com/a/1190000015958106
用php生成HTML文件的类的更多相关文章
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求: Web Service是真正“办事”的那个,提供一种办事接口的统称. ...
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl差别之个人见解 Web Service实现业务诉求: Web Service是真正"办事"的那个,提供 ...
- java生成db文件
工作中遇到一个需求,就是需要把mysql里的一些表数据生成db文件,给客户端使用,客户端使用sqlite数据库: 首先我们需要在项目中添加Sqlite JDBC 依赖 <dependency&g ...
- XSD文件生成C#VO实体类
最近公司要做一个项目,需要和现有的其他项目对接,由于不知道他们的数据库,只有XSD文件.所以,我们在修改相应的程序时,就需要根据他们提供的XSD文件,来写我们的VO实体类,由于我写过根据Oracle数 ...
- 使用CodeSmith快速生成映射文件和映射类
一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法. CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来 ...
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法
在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了“错误: 无法访问android.app.Activity 找不到android.app.Activity ...
- 解决Android studio生成H文件时报找不到类文件错误
今天整理思路时觉得在native直接调用java的方法显示这个办法挺不错 于是就用到了生成H文件 可能我的编译环境和他们的不一样 网上的教程如下 javah -d ../jni com.jm.prom ...
- Mybatis-Generator自动生成XML文件以及接口和实体类
整合了MySQL和Oracle配置文件生成方法 这个是整个文件夹的下载地址:http://www.codepeople.cn/download 主要给大家介绍一下generatorConfig.xml ...
- Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWrit ...
随机推荐
- 【CSU 1079】树上的查询
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1079 现有一棵有N个顶点的树,顶点的标号分别为1, 2, …, N.对于每个形如a b k的询问, ...
- python-----查看显卡gpu信息
需要安装pynvml库. 下载地址为:https://pypi.org/project/nvidia-ml-py/#history pip安装的命令为: pip install nvidia-ml-p ...
- 关于js-cookie使用出现兼容性问题以及js-cookie的如何使用
最近使用vue开发的项目,开发过程引入了js-cookie插件,在PC端以及移动端网页调试都没出现问题,但是打包成APP在安卓手机调试发现使用js-cookie保存的数据失效了,然后只能使用local ...
- LVS的持久连接、会话保持和高可用介绍
持续连接 1)持久连接(lvs persistence)模板: 实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS ipvsadm -A|E -t ...
- E20171108-hm
breadcrumb n. 面包屑:面包心; 2.面包的松软(或柔软)部分; n. 网页导航区(a -> b -> c)
- 17年day3
/* 嗯,又一天. 时日无多了,还能蹦哒几天? 上午依旧考试,日常挂T1,读错题.还是好困. 兔子说明天晚上要请我们吃水饺~~~~去年就没这待遇. 下午打开邮箱一看,咦?嗯. 昨晚做噩梦NOIP考了状 ...
- Invalid default value for 'create_date' timestamp field
创建表的语句中有这么一句 `create_date` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', 1 之后就报了这个错误. That is be ...
- 263 Ugly Number 丑数
编写程序判断给定的数是否为丑数.丑数就是只包含质因子 2, 3, 5 的正整数.例如, 6, 8 是丑数,而 14 不是,因为它包含了另外一个质因子 7.注意: 1 也可以被当做丑数. 输 ...
- 微信小程序一些常见的坑
1.小程序都报wxss编译错误 解决方法: 在控制台输入openVendor() ,清除里面的wcsc wcsc.exe 然后重启工具 2.微信小程序wx:for警告 Now you can prov ...
- [Python] xrange和range的使用区别
zhuan:https://blog.csdn.net/humanking7/article/details/45950967 range 函数说明:range([start,] stop[, ste ...