【转】创造世界上最简单的 PHP 开发模式

PHP从入门到精通—PHP开发入门-PHP概述、PHP开发环境搭建、PHP开发环境搭建、第一个PHP程序、PHP开发流程 在上图中,Apache的版本号为2.4.27,PHP的版本号为5.6.31,MySQL的版本号为5.7.19。l PHP是B/S(Browser/Server,浏览器/服务器)架构,即服务器启动后,用户可以不使用客户端软件,而是使用浏览器进行访问,这种方式既保持了图形化的用户界面,又大大减少了应用程序的维护量。PHP是全球网站使用最多的脚本语言之一,从最初的PHP/FI到现在的PHP 7,经过多次的重写和扩展,与Linux、Apache和MySQL共同组成了一个强大的Web应用程序平台(简称LAMP)。 阅读详情

   php 作为“最简单”的 Web 脚本语言, 在国内的市场越来越大,phper 越来越多,但是感觉大多数人好像没有考虑到模式问题,什么样的设计模式才是最优的,才是最适合自己目前工作的,毕竟效率是最重要的(用省下的时间打游戏,多美啊...)。MVC 应该是首选,www.sourceforge.net 上有好多优秀的基于 MVC 的开源项目,大家可以冲过去研究研究。

  前几天给自己公司网站改版,主要还是文章发布系统,老板说后台我想怎么设计就怎么设计,唯一的前提就是快。于是自己搭建了一个简单的发布系统的框架。如果单纯从文章发布系统上讲,基本上可以满足“中小型”企业网站的文章发布系统的要求,后台的总共的php代码不超过800行,而且支持任意扩充和plugin功能。

  废话不再说了,下面把我的架构讲一下,希望对您能有所帮助。

  注意:在开始前,需要您下载一个模板处理工具类:“smarttemplate”,并了解一些模板的简单的使用。

  我的测试环境:windows2k/apache2/php4.3.2/smarttemplate类库

  先讲一下整个web站点的文件的分布,在后面的章节中将陆续创建并填充下面的目录和文件

  我的服务器的web的根目录是 “C:/Apache2/htdocs/”

  我在下面建立了一个文件夹“cmstest”作为我的网站的主文件夹

  文件夹“cmstest”下面的子文件结构是:

  /config.inc.php

  /list1.php

  /list2.php

  /new.php

  /add.php

  /view.php

  /page.js

  /src/MysqlUtil.php

  /src/ArticleUtil.php

  /src/CoreUtil.php

  /src/ParseTpl.php

  /src/lib/smarttemplate/*.* 这个目录用来存放smarttemplate的类库的

  /smart/template/list1.htm

  /smart/template/list2.htm

  /smart/template/new.htm

  /smart/template/add.htm

  /smart/template/view.htm

  /smart/cache/

  /smart/temp/

  设计步骤:

  1. 考虑自己公司的网站的特点和已经设计的模板的结构,总结要实现的功能,列出清单。
  2. 分析功能清单,把功能分类。每一类的功能都是有共同点的,可以通过相同的方法实现的。
  3. 根据功能,设计数据库的表结构
  4. 设计一个配置文件config.inc.php, 用来记录网站的一些基本的信息,包括数据库名........
  5. 为每一类功能设计数据库查询的接口函数,这样以后相似的操作只要调用这个接口就可以了。这样避免了以后可能发生的大量的代码重复的操作,也就达到了代码复用的目的。
  6. 定义自己对模板工具的包装函数,以后调用的时候就不用管模板工具的使用问题了,只有往自己的包装函数里面塞数就可以了。
  7. 基础函数已经ok了,开始轻松的页面实现和模板的处理了。

  我们现在就开始设计一个简单的系统,看看我是怎么一步一步地实现一个“最简单的文章的发布系统”的,当然只是我模拟的一个简单的项目,实际中一个项目可能比这要复杂的多。

  一、分析我的案例:

  呵呵,这个客户项目好简单的啊,幸福ing..........

  list1.php:有三个文章列表和一个按钮,“php开发文章列表”“php开发热点文章列表”“asp开发最新文章”“添加新文章”

  list2.php:有2个文章列表“asp开发文章列表”“asp开发热点文章列表”

  new.php:一个添加文章的表单的页面

  add.php: 处理new.php的表单的页面

  view.php: 文章察看的页面

  二、分析功能

  “php开发文章列表”“asp开发文章列表”-------按文章的发布顺序,倒序排列显示,每页显示5篇文章

  “php开发热点文章列表”“asp开发热点文章列表”-------按文章的点击察看次数排序显示文章,显示3篇文章

  “asp开发最新文章”按文章的发布顺序,倒序排列显示,显示3篇文章

  “添加新文章”------一个文章的发布功能, 包括文章标题/作者/内容

  “文章察看”---------显示某篇文章内容

  综合的看一下,对功能进行分类包括:

  1、文章列表:正常的分页列表、按点击数列表、按发布顺序的列表

  2、文章发布:一个表单的输入和处理

  3、文章察看:读取显示文章内容

  呵呵,功能的确是太简单了些。

  三、设计数据库:

  数据库名:cmstest

  数据表:

CREATE TABLE `article` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR( 100 ) NOT NULL ,
`content` TEXT NOT NULL ,
`datetime` DATETIME NOT NULL ,
`clicks` INT( 11 ) ,
`pid` TINYINT( 2 ) NOT NULL ,
PRIMARY KEY ( `id` )
);

 

CREATE TABLE `cat` (
`cid` TINYINT( 2 ) NOT NULL ,
`cname` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `cid` )
);

 

  ------------------------------

  article表是文章内容表,

  ----------------------------

  `id` 文章编号

  `title` 文章标题

  `content` 文章内容

  `datetime` 发布时间

  `clicks` 点击数

  `pid` 分类表号

  ------------------------------

  cat表是文章的类别表

  ----------------------------

  `cid` 分类表号

  `cname` 分类名称

  ----------------------------

  上面是表的数据库结构,光有了这些还不够,还要有数据

INSERT INTO `cat` VALUES(1, "php开发"),(2, "asp开发");
INSERT INTO `article` VALUES(1, "php开发1", "php开发1内容", "2004-8-1 1:1:1", 0, 1);
INSERT INTO `article` VALUES(2, "php开发2", "php开发2内容", "2004-8-2 1:1:1", 0, 1);
INSERT INTO `article` VALUES(3, "php开发3", "php开发3内容", "2004-8-3 1:1:1", 4, 1);
INSERT INTO `article` VALUES(4, "php开发4", "php开发4内容", "2004-8-4 1:1:1", 3, 1);
INSERT INTO `article` VALUES(5, "php开发5", "php开发5内容", "2004-8-5 1:1:1", 2, 1);
INSERT INTO `article` VALUES(6, "php开发6", "php开发6内容", "2004-8-6 1:1:1", 1, 1);
INSERT INTO `article` VALUES(7, "php开发7", "php开发7内容", "2004-8-7 1:1:1", 0, 1);
INSERT INTO `article` VALUES(8, "jsp开发1", "jsp开发1内容", "2004-8-1 1:1:1", 0, 2);
INSERT INTO `article` VALUES(9, "jsp开发2", "jsp开发2内容", "2004-8-2 1:1:1", 0, 2);
INSERT INTO `article` VALUES(10, "jsp开发3", "jsp开发3内容", "2004-8-3 1:1:1", 4, 2);
INSERT INTO `article` VALUES(11, "jsp开发4", "jsp开发4内容", "2004-8-4 1:1:1", 3, 2);
INSERT INTO `article` VALUES(12, "jsp开发5", "jsp开发5内容", "2004-8-5 1:1:1", 2, 2);
INSERT INTO `article` VALUES(13, "jsp开发6", "jsp开发6内容", "2004-8-6 1:1:1", 1, 2);
INSERT INTO `article` VALUES(14, "jsp开发7", "jsp开发7内容", "2004-8-7 1:1:1", 0, 2);

  这样我们的数据库就设计完了。接下来就开始涉及到具体的实现了。

  四、设计config.inc.php文件

  这个文件用来设置一些web上通用的数据信息和一些参数,其他的具体的实现页面都通过这个页面获取需要的数据,下面是配置的清单

  其中的 define('CMS_ROOT', 'C:/Apache2/htdocs/cmstest/'); 路经根据自己apach的web路经来改(参照最开始介绍文件夹结构的地方改)。

  五、制作功能接口(1)

  首先对 mysql 数据库函数进行包装,简化对数据库操作,网上有很多这样的开源的类。但是这里我个人根据自己的需求和习惯,自己对 mysql 的函数进行了包装,写得好坏就先不管了。这个地方简单的看一下就可以了,不同的包装的类操作是不同的,而且这里的主要目的是理解这套“架构”,不用太扣代码。

  -------MysqlUtil.php--------

  五、制作功能接口(2)

  下面来正式的看看,我们共要实现的功能进行的包装

  ------------ArticleUtil.php----------------

  这段代码是不是就简单多了啊?这就是自己对mysql函数进行包装的好处!

  下面来研究一下他们是怎么实现我们的功能的呢。

  “php开发文章列表”--------getArticleList(1, "id DESC", $page, 5)

  “asp开发文章列表”--------getArticleList(2, "id DESC", $page, 5)

  “php开发热点文章列表”----getArticleList(1, "clicks DESC, id DESC", 1, 3)

 

  “asp开发热点文章列表”----getArticleList(2, "clicks DESC, id DESC", 1, 3)

  “asp开发最新文章”--------getArticleList(2, "id DESC", 1, 3)

  “添加新文章”-------------addArticle($data)

  “察看文章”---------------getArticle($id)

  六、对smarttemplate类进行包装(革命尚未成功,同志仍须努力)

  具体的smarttemplate的使用这里就不讲了,不然口水讲没了,都讲不完。下面这个是具体的对包装函数

  -------------ParseTpl.php----------------

我用php构建了魔兽世界服务器,只为证明php是世界上最好的语言 我用php构建了魔兽世界服务器 --只为证明php是世界上最好的语言 作为一个魔兽老玩家,最近看着暴雪开了怀旧服,早已寂灭的心又开始躁动不安了,我正式入坑是网易接替九城那会,号称万年TBC, 对于那个时代,用一句话表达就是“我站在暴风城的广场上,听着港口涛声,幻想着诺森德天气多么寒冷…”,你懂的~ 那时候刚上大学,对于涉世未深的我来说,魔兽的差点让我变成网瘾少年,直到毕业步入社会,才慢慢淡... 阅读详情

相关推荐

PHP|| PHP与MVC开发模式&相关题目及答案

将模板的输出连同从数据源取得的数据一起缓存,这样并不是每次网页被访问时就去连接数据源。数据源通常都是外部的,而且很慢,所以也经常是应用的瓶颈,如同远程数据源一样。在决定何时编译上也很智能,他只在对网页有实际的更改的时候才会重新编译,所以你不需要担心手动编译会出现问题。处理与数据有关的逻辑,不仅仅是数据,而且还负责执行那些操作这些数据的业务规则。脚本,而不是二进制码,像在一般的编程中做的那样。.编写程序,制作一个简单的文件存储系统,实现上传文件的功能。脚本文件,而不是模板本身,这样就节省了再次解析的时间。

weixin_63378697的博客 1156

PHP技术亮点,我眼里的THINKPHP5新亮点(1)

1.URL访问可以看到,无论是URL访问还是命令行访问,都采用PATH_INFO访问地址,其中PATH_INFO的分隔符是可以设置的。注意:5.0取消了URL模式的概念,并且普通模式的URL访问不再支持,但参数可以支持普通方式传值。即原来的普通模式http://localhost/?m=home&c=user&a=login&var=value(用参数传递来指定模块控制器方...

weixin_39801613的博客 308

实现PHP插件机制的开发模式

钩子函数是软件开发中的一种技术,特别是在插件机制中被广泛使用。它们允许程序开发者在特定的执行点插入自定义的代码。这些特定的执行点被称为“钩子点”,而插入的代码即“钩子函数”。钩子函数可以监视、修改或增强应用程序或系统的内部行为,而无需改变原始代码。插件的生命周期是指从插件加载到卸载的整个过程,包括加载、初始化、激活、停用和卸载等状态。对生命周期状态的定义和管理是保证插件机制稳定运行的核心。下面是一个生命周期状态转换的逻辑图:graph LRA[加载] --> B[初始化]B --> C[激活]

weixin_42600128的博客 853

PHP开发基础

PHP自学笔记Day 1

weixin_64366215的博客 1995

手把手教你用Apollo Dreamview调试自动驾驶感知模块(附数据包下载)

本文详细介绍了如何使用百度Apollo平台的Dreamview工具调试自动驾驶感知模块,包括环境配置、数据加载、感知问题定位和多传感器融合调试等关键步骤。通过实战案例和参数调整技巧,帮助开发者快速掌握自动驾驶感知模块的调试方法,提升开发效率。

weixin_29084111的博客 139

秋叶ComfyUI整合包:一键部署AI绘画工作流,解决环境配置难题

在AI绘画和生成式AI领域,Stable Diffusion作为开源的扩散模型,为图像生成提供了强大的技术基础。其核心原理是通过学习数据分布,对随机噪声进行逐步去噪,最终生成高质量的图像。这项技术的价值在于极大地降低了专业图像创作的门槛,并推动了AIGC(人工智能生成内容)在艺术设计、游戏开发、广告营销等场景的广泛应用。然而,其典型工作流实现工具ComfyUI,在实际部署中常因Python环境、PyTorch版本与CUDA驱动之间的复杂依赖关系而受阻,尤其是面对NVIDIA 30系、40系及未来50系等不同

优快云头条 668

PHP程序开发基础

,以确保代码的兼容性和可移植性。特殊数据类型是指在某些编程语言中,除了基本的数据类型(如整数、浮点数、字符、布尔值等)和复合数据类型(如数组、对象等)之外,还有一些特殊的数据类型用于特定的目的或表示特定的概念。①空值(Null):在某些编程语言中,空值(Null)是一种特殊的数据类型,用于表示变量没有值或引用了一个不存在的对象。在Apache服务器的文档根目录下(通常是htdocs或www目录),创建一个名为test.php的文件,并输入以下代码。数据类型转换可以是隐式的(自动的)或显式的(手动的)。

Bard的博客 1367

ArcGIS基于DEM提取微流域单元(附练习数据下载)

流域作为一个相对独立的地理单元,与行政区的划分有着本质上的区别。流域的划分更注重自然因素,流域作为一个综合的自然整体,在其内部形成了一个天然的物质与能量流动的场所,并通过水流的作用,与周围的区域进行物质和能量的交换。流域的精确划分作为一个研究的基础工作,那么接下来给大家说一下利用DEM提取小流域的案例教程——以贵州省遵义市正安县为例。 1 数据获取 地理空间数据云(http://www.gscloud.cn/),数据分辨率为30m。也可直接点击这篇直接下载→全国30m90mDEM下载。 若想要获得更高精度.

qq_43173805的博客 4834

[转]续---“创造世界上最简单的------php开发模式”

  “技术问题都是可以解决的,技术问题不是最最重要的”   最近帮过一些人解决技术问题,发现一个很严重的问题,他们的做法和我最开始写程序的时候是一样的,这样下去会走好多的弯路。现在有一类程序员太多,他们总是一味的追求“所谓的技术难点”,总是把心事放在一些边边角角的“程序代码”实现问题上,写程序就是为了完成功能,根本就不考虑什么重构/抽象/复用之类的问题,目标只有一个----完成任务。   程序代码

怪才技术家园 920

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 774

058、时域降噪(Temporal Denoise):运动补偿与递归滤波在视频降噪中的应用

本文深入探讨了时域降噪(Temporal Denoise)技术在视频处理中的应用。作者通过车载环视项目案例,揭示了空域降噪的局限性,提出利用帧间信息进行降噪的核心思路。文章详细解析了递归滤波和运动补偿两大关键技术,指出递归滤波简单但易产生拖影,而运动补偿通过计算运动矢量解决此问题。作者还分享了多帧降噪方案的优势与算力挑战,并总结了噪声模型匹配、运动矢量一致性等实战调优经验。最后强调时域降噪需要与空域降噪平衡,指出调试工具的重要性,提出"在保证运动区域无鬼影的前提下追求信噪比"的实践原则,体现了算法复杂度与效

zzfmlxs的博客 93

创造世界上最简单的 PHP 开发模式

/*************************************//* author:大龄青年/* email :wenadmin@sina.com/* from: http://blog.youkuaiyun.com/hahawen/*************************************/  php 作为“最简单”的 Web 脚本语言, 在国内的市场越来越大,phper

gzzzz的专栏 1290

Python 爬虫实战:爬虫与 ECharts 结合 —— 前端可视化展示

本文介绍了爬虫技术与ECharts可视化结合的完整实现流程。首先使用Python爬取京东商品数据(价格、评价数等),通过BeautifulSoup解析和pandas处理转换为JSON格式。然后构建前端页面,利用ECharts实现价格分布柱状图、价格-评价数散点图和店铺占比饼图三种可视化效果。文章详细解析了爬虫数据提取、格式转换和前端图表配置等关键技术点,并提供了完整的代码示例。最后提出了基于API接口、数据库存储等扩展方向,为数据采集到可视化展示提供了完整的解决方案。

2503_91057718的博客 632

创造世界上最简单的------php开发模式

/*************************//* author:大龄青年/* email :wenadmin@sina.com/* from: http://blog.youkuaiyun.com/hahawen/*************************/原代码下载: http://club.phpe.net/index.php?s=&act=Attach&type=post&id=2

锻炼肌肉,防止挨揍 5318

AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信

随着科学技术的不断更新和社会文明的不断进步,汽车已经走入寻常百姓家, 成为当代社会必不可少的交通工具。伴随着互联网技术的飞速发展,汽车也不再 是一个简单的交通工具,已经逐渐发展成为一个集出行、通信、娱乐等功能于一 身的综合智能体,进而推动了车联网产业的蓬勃发展。车联网是在传统汽车的框架上安装了传感器、执行器、控制器等分布式和集 中式控制器,使汽车具备环境感知、协同控制、优化执行等功能,并通过网络技 术实现与车外环境的信息共享,给驾驶带来方便的同时也终将成为可以替代人操 作的新一代汽车[1-3]。

getusushu的博客 2591

(11-3-03)多任务与元强化学习:综合实战:基于元强化学习的迷宫导航系统(3)

本文介绍了策略网络隐空间可视化的实现方法及其在强化学习中的应用。通过设计visualize_latent_space函数,使用t-SNE算法将高维隐空间特征降维至二维进行可视化,直观展示策略网络在不同任务中的特征分布。文章详细阐述了实现流程:状态收集、t-SNE降维和可视化绘图,并提供了完整的Python代码示例。实验结果表明,该方法能有效分析策略网络的学习过程与适应能力,为优化模型提供重要依据。同时,文章还介绍了主程序的完整流程,包括环境初始化、元智能体训练与评估、学习策略比较等环节,最后对实验结果进行可

码农三叔 1041

创造世界上最简单的PHP开发模式

php 作为“最简单”的 Web 脚本语言, 在国内的市场越来越大,phper 越来越多,但是感觉大多数人好像没有考虑到模式问题,什么样的设计模式才是最优的,才是最适合自己目前工作的,毕竟效率是最重要的(用省下的时间打游戏,多美啊...)。MVC 应该是首选,www.sourceforge.net 上有好多优秀的基于 MVC 的开源项目,大家可以冲过去研究研究。   前几天给自己公司网站改版,主

azzfanke的专栏 999

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

PHP常用开发模式探讨

对于PHP来说,常用的开发模式主要包括MVC(模型-视图-控制器)、MVC的衍生模式(如MVVM、MVP等)、单页面应用(SPA)和微服务架构等。如果按照这个逻辑来看的话,这些模式还能够帮助我们更好地应对项目变更和扩展需求,保持项目的稳定性和可维护性。毫无疑问在运用开发模式时,我们需要遵循一定的规范和标准。接下来,我们就来深入探讨一下PHP的常用开发模式,看看它们是什么,为什么重要,以及我们该如何运用它们。通过掌握和运用这些模式,我们可以更好地组织代码、提高开发效率、保持项目的稳定性和可维护性。

a159900的博客 355

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

续---“创造世界上最简单的------php开发模式”

  “技术问题都是可以解决的,技术问题不是最最重要的”        最近帮过一些人解决技术问题,发现一个很严重的问题,他们的做法和我最开始写程序的时候是一样的,这样下去会走好多的弯路。现在有一类程序员太多,他们总是一味的追求“所谓的技术难点”,总是把心事放在一些边边角角的“程序代码”实现问题上,写程序就是为了完成功能,根本就不考虑什么重构/抽象/复用之类的问题,目标只有一个----完成任务。  

锻炼肌肉,防止挨揍 4457

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

最简单的php扩展用php语言写开发的、

解释:这是一个标准的PHP扩展项目composer.json配置文件,定义了项目元数据和依赖关系 5 7。

qq_37805832的博客 917

PHP是世界上最好的语言是什么梗?

PHP 是世界上最好的语言”这个梗的来源说法不一。一种常见的说法是出自一则笑话:某女说若能让论坛的人吵起来,就跟某软件工程师走。该工程师称“PHP 是最好的语言”,论坛因此炸锅,各种吵架。但这个梗并非仅源于此笑话。其实,早在 2001 年7月的PHP文档中就有相关表述,如“PHP is the best language for web programming, but what about other languages?”,意思是“PHP 是网络编程最好的语言,但其他语言又怎样呢?

weixin_45498884的博客 1万+

PHP语言25周年,PHP是世界上最好的语言

1995年6月8日,PHP 1.0版本正式问世,目前已经更迭到7.4版本,PHP 8.0 Alpha1版本也有望于今年6月中旬发布。25周年之际,杜蕾斯官方微博发文庆祝:“#PHP语言25周年#不管PHP是不是世界上最好的语言,反正—— print(“durex is the best”)” 公众号发文: 截至2020年6月9日公众号留言排名如下: 由此来看,Java赢了 微博发文: 许多网友讨论:杜蕾斯还是不懂编程啊,PHP为什么不用echo 答:有网友认为,杜蕾斯的小编可能不懂PHP,就是.

WXiangQian 3806
上一篇: 解决麦克风声音小的方法
下一篇: [转]写代码的四个基本准则
怪才
博客等级 码龄18年 30粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值