思想编码规范php.docx
- 文档编号:24656237
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:21
- 大小:792.62KB
思想编码规范php.docx
《思想编码规范php.docx》由会员分享,可在线阅读,更多相关《思想编码规范php.docx(21页珍藏版)》请在冰豆网上搜索。
思想编码规范php
一.项目背景
www:
why+what+how
1.项目的意义
Why:
为什么要做这个项目?
a.检验大家一个月来学习的掌握情况,给自己一个交代
b.把零散的知识点综合到一起完成一个项目,让大家体验做项目的感觉
c.发现不足之处,一是知识点上的不足,二是对所学知识点的运用不熟练
重视这个项目,认真对待。
2.项目定位
What:
做什么?
做网站,web开发
✓Cms:
内容管理系统
✓SNS:
网络社交
✓电子商务:
带来财富,关注的重点
✓其他
本次项目围绕电商网站展开。
B:
business,商家C:
customer,客户
✓B2C:
✓C2C:
网站方提供平台淘宝拍拍
✓B2B2C:
京东国美苏宁
✓B2B:
批发市场阿里巴巴
✓O2O:
线上线下onlineoffline,美团(阿里,高德)糯米(XX,XX地图)大众点评(腾讯),依赖于地图
B2C:
基于B2C的电子商务网站
二.项目规划
How:
怎么做?
1.项目整体架构
从电子商务的角度来讲:
包含三大模块,商品模块+用户模块+电子商务(订单模块)
从编写程序的角度来讲:
一个网站包含两个部分,后台+前台
思考:
网站后台和前台之间的联系?
简单看,二者是独立的,风格不一样,目标人群不一样
仔细分析,二者之间是有联系的,数据是通用的,其实操作的是同一个数据库
2.时间安排
三.编程思想
思想有多远,你就给我滚多远。
思想决定你的前景。
1.oop思想
OOP:
ObjectOrientedProgramming,面向对象编程面向对象程序设计
三大特征:
✓封装:
隐藏内部实现的细节,给外部提供一个接口,程序中是通过类来实现的
✓继承:
代码重用,通过extends实现,子类可以继承父类的属性和方法(private除外)
✓多态:
多种形态,PHP本身就是一个多态性语言,因为它是若类型的,php多态不明显
$a=100;
$a=“oop”;
OOP的好处:
✓可维护,
✓可重用,
✓可扩展,
✓灵活度高
2.mvc模式--(重要程度:
*****)
MVC思想,模式,
A.解释
M:
model,模型,完成具体业务逻辑(包括数据库的crud操作和其他一些常规操作,如文件上传,验证码)
V:
view,视图,显示用户的交互界面
C:
controller,控制器,负责业务的调度,扮演交通警察的角色
B.一句话概括
核心思想,将业务逻辑和显示相分离(将程序的输入,处理和输出分离)
C.扩展,详细说明
D.优缺点
优点:
分工明确,层次清晰
缺点:
理解起来比较麻烦,学习成本要高一点
【注意】:
oop和mvc没有必然联系
四.项目搭建
设计要点
Ø良好的项目结构
Ø统一的命名规范
Ø单一入口
1.项目结构说明
一个成功的项目离不开良好的结构。
项目根目录
application目录结构
Controllers目录结构
views目录结构
【注意】:
模型不用分前后台,它们共用一个。
Framework目录结构
Public目录结构
【注意】:
这里只放前台的静态资源。
Why?
前台是运行普通访问的,后台则不是,可以提高后台的安全性。
此时,效率会有所降低,但是别忘了,这是后台,对性能要求没有高。
2.搭建过程
(1).编码规范说明
必须有一个良好的编码规范。
1.一定要有注释
2.一定要有统一的命名规范
文件名,主要是类文件,类名.class.php,如Mysql.class.php,不是类,则不加class
类名、方法名、属性名
类名使用大驼峰式,如GoodsController,首字母大写,对应的文件名是GoodsController.class.php
方法名使用小驼峰式,addAction,首字母小写
属性名也使用小驼峰,有时候会对private的属性前面加一个下划线(推荐)
具体编写的时候,写控制器和模型的时候,都需要指明,controller和model。
函数名
自定义的普通函数,不是类中的方法,建议遵循php的本身写法,如var_dump,is_array下划线式,还有一种方式imagecreatetruecolor,全小写,大家选定,保持即可。
3.严格区分大小写
Lamp组合,linux系统是严格区分大小写的。
4.注意缩进,代码对齐
在写代码之前,一定要制定自己的编码规范。
(2).定义核心启动类---让项目run起来
可以改进一下,使用静态方法更好。
思考,在启动类中,应该实现那些功能呢?
以index.php?
p=admin&c=goods&a=add请求为例
✓初始化工作,如路径定义等
✓路由功能
✓自动加载功能
DIRECTORY_SEPARATORY,目录分隔符,是在一个预定义常量。
在linux下解析为/,在windows下解析为\。
小问题:
前后台的控制器和视图目录怎么定义呢?
需要解析url携带的参数,p=admin&c=goods&a=add
如何获取p、c和a呢?
请求方式在项目中的表现形式有:
✓Get,
✓Post,表单
此时我们应该使用$_REQUEST
提到自动加载,一定会想到__autoload,魔术函数
它是一个普通的函数,不是类的方法。
如果直接在类中定义一个__autoload的方法,它并不会实现自动加载。
那应该如何我们的自动加载呢?
✓直接在index.php中,编写__autoload,
✓在类中定义一个方法,让后将其注册为自动加载方法。
(推荐)---spl_autoload_regisiter
注意spl_autoload_register函数的用法,
如果是普通函数,只需要填写函数名即可
如果是类中的方法,需要告知是哪个类的哪个方法,使用数组的形式传递
__CLASS__表示当前类
在我的自动加载方法中,只负责加载application下面的控制器类和模型类。
主方法,run
Init方法,用于初始化
路由方法,实例化对象并调用方法
自动加载
编写后台首页控制器,测试效果
在浏览器中,输入http:
//localhost/shopcz/index.php?
p=admin,效果如下:
(3).加载视图
非常简单,只需要使用include的方式即可。
目标--显示后台首页
单一入口程序的特点,所有的相对路径的请求,都是相对index.php而言的。
然后修改iamges、css和js的路径即可。
在浏览器端,出于安全的考虑,是不能访问本地资源的。
(4).定义核心控制器
编写基础控制器,定义所有控制器都需要用到的方法。
小问题,基础控制器写在哪儿?
基础控制器和具体的业务无关的,所有的项目都可以使用,所以应该放到framework中,有时候也称之为核心控制器。
分析核心控制器的功能
✓其一,提示信息的跳转
✓其二,载入其他模型(工具类和辅助函数)
跳转页面,
跳转到某个页面之后,给出提示信息,n秒后跳回来。
✓Php中使用header函数
✓Js中使用window.location.href=url
✓Html中使用meta标签,实现跳转
Meta可以控制时间,所以使用它。
查看message.html页面
在使用的时候,其他控制器都要继承基础控制器。
需要注意,先载入核心控制器,直接在init中手动载入
(5).载入数据库模型
将mysql.class.php拷贝到database目录下
将model.class.php拷贝到core目录下
然后要确保msyql能够连接,需要编写配置文件
如何写,要结合我们的model和mysql类文件
编写具体的模型,完成数据库的操作
在控制器中调用模型,完成查询
在浏览器中查看结果,如下:
(6).载入工具类和辅助函数
在基础控制器中定义方法,完成工具类和辅助函数的加载
在控制器中调用这些方法,完成加载,如:
对应的input文件
结果:
可以再深入一点,把这个功能做的更好一些(留给大家自己思考)
3.框架总结
核心思想:
mvc
项目结构:
框架一旦搭建成功,在编写项目的时候,都是在application下面进行的。
无非就是mvc三个东西,三板斧。
在这个框架中,我们用到了三种加载方式:
✓自动加载,通常是对应于application中的
✓在init中加载,是整个项目必不可少
✓手动加载,通常是对应于框架提供的文件
五.数据库设计
重要程度:
*****
难度:
*****
要点:
✓表与表之间的联系
✓每一个字段的类型
数据库设计的好坏决定了整个项目的成败。
数据库的设计体现了你对业务逻辑的理解。
从商品出发
图片的保存,分两个方面:
图片文件本身保存到磁盘的某个目录下,让后将其地址保存到数据库的字段中。
表与表之间的关系有三种:
✓一对一,a表中的一条记录对应于b表中的一条记录,反之一样
✓一对多(多对一),a表中的一条记录,对应于b中,有n条件,反之,b表中一条记录对应于a表1条
✓多对多,,a表中的一条记录,对应于b中,有n条件,反之亦然
要确定两个表之间的关系,一定要从正反两个方向来推导。
品牌表和商品表之间的关系,
一个品牌对应n个商品
一个商品对应1个品牌
结论:
品牌表和商品表是一对多的关系
如何表示这种关系呢?
在多的一方,增加一个字段和一的一方的主键关联。
PK:
primarykey主键
FK:
foreienkey外键
此时,品牌表和商品表之间存在父子关系,品牌表是父,商品是子
在mysql中,没有布尔类型,通常使用tinyint来表示
商品的规格参数如何保存?
(难点)
任何一个商品的信息都是由两部分组成的?
✓基础信息:
所有的商品都具备的信息
✓扩展信息:
不同类型的商品,它的属性是不一样的。
规格参数
对于基础信息,直接将其保存到商品表中即可
对于扩展信息(规格参数),怎么保存呢?
最傻的方式,就是用一个大字段一次性保存,比如用text。
不好,不利于搜索(效率低下),也不利于管理(页面上显示也不灵活)。
我们希望的方式,每个商品的每个规格都用一条记录来保存。
意味着商品和扩展信息有一种联系。
一个商品对应多条扩展信息
1条扩展信息对应多个商品
结论:
商品和扩展信息是一个多对对的信息
如何保存这类信息呢?
先看一个简单的demo
结论:
多对多的关系,需要引入第三张表(关联表),来表示二者之间的关系。
关联表的主键有两种方式:
✓组合主键,使用两个字段构成主键
✓再加一个字段,表示主键
又面临一个新的问题
有这么多扩展属性,如何来管理。
假如现在有20种商品(书籍,服装,手机等),每一种商品有20个扩展属性,意味着400条记录要管理。
在这种情况下,我现在需要添加一个书籍商品----php编程,填写20个扩展属性。
需要对这些扩展属性进行分门别类的管理。
再增加一张表,商品类型表,用于表示商品扩展属性的类别
问题:
商品分类和商品类型有什么区别,为什么要搞这两张表?
二者服务的对象不一样,所以目的就不一样。
数据库,尝试自己来设计一下。
有三张图很重要:
1.项目整体架构图
2.Mvc思想解读
3.数据表设计图
布置任务:
1.完成框架的搭建
2.准备做商品分类管理
大家在做的时候,可以参考ecshop。
六.后台功能
七.前台功能
八.上线
九.答辩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 思想 编码 规范 php