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