PHP项目开发实例(一)(未使用框架)

学习意义

    根据 视频教程 学习PHP基础 和 MVC 框架的学习。     

    了解PHP原生开发一个项目的流程,为以后使用 TP5 和 Laravel 作对比。

    了解一个项目中大概的流程 和 运用到的技术点,以及一些细节的逻辑思想,培养编程逻辑思维。

    GitHub地址    https://github.com/L1633/PHP-shop  有空会慢慢更新。

    用的环境是 phpStudy  5.3.29-nts + Apache

oop思想

    OOPObject Oriented Programming,面向对象编程,面向对象程序设计。

    核心思想:使用人类思考问题、解决问题的方式来编写程序。

    OOP的优点(面向过程对比)

    可维护;可扩展;可重用;灵活度高。

MVC思想

    解释:MVC是一种编程思想,M,model,表示模型,完成具体的业务逻辑,V,view,表示视图,用来展示页面,C,controller,控制器,专门用来负责调度的。

    核心思想:将业务逻辑和显示相分离。

    优缺点:优点,分层明确,便于维护和分工协作,便于交流。缺点,理解比较费劲,学习成本高,对于小项目,反而感觉有些麻烦。

项目搭建    

    项目定位:基于B2C的电子商城

    项目流程

    入口文件 index.php

    在项目中,有许多控制器 和 模型 ,所有就会有共同的代码,需要定义基础控制器和基础模型。

项目流程

    注意:1 良好的项目结构 ;2 统一的命名规范 ;3 单一入口。

    一  项目结构

项目结构
application结构目录
controller结构目录
view结构目录

                 model,模型前后台共用,不用创建admin 和 home;

frame结构目录
public结构目录

        二 项目规范

          命名规范

           ① 一定要有注释 ,注释占整个项目的50%;

           ② 一定要有统一的命名规范,所有的命名都应该尽量简洁,见名知意。

            文件名

            类文件,类名.class.php  如 AdminController.class.php;

            普通文件,文件名.php

            类名,大驼峰命名法,首字母大写,每个单词首字母大写,AdminController

            方法名,小驼峰命名法,首字母小写,每个单词首字母大写,checkLogin

            属性名,小驼峰命名法 或 下划线方式,保持一致即可。

            函数名,下划线 (var_dump)或者 直接连写(imagecreatetruecolor)

            在我们的项目中,所有的控制器都是以xxxController命名的。所有的数据库模型都是以xxxModel命名的。

            ③ 严格区分大小写

            Windows下有时候不区分大小写,但是php做的项目通常是放在linux操作系统下,它是严格区分大小写,所以需要养成好的习惯。

            ④ 注意缩进,代码对齐


    三 项目搭建

          ① 定义核心启动类

            framework中的需要写的功能:

            实例化对象调用方法,获取pca参数。

            所以包含类定义文件---------->自动加载

            有这么多的文件,分别存放在不同的目录中,如何处理比较好? 

            初始化:定义路径常量

            路由分发:实例化对象并调用方法

            自动加载:实现类的自动加载

入口文件
初始化

                函数:getcwd()获取当前工作目录,在项目中获取的是根目录。

                DIRECTORY_SEPARATOR常量,路径分隔符,在不同的操作系统下解析为不同的符号,Linux---->/   ,  Windows------>\  。

路由分发和自定义自动加载函数

                __CLASS__,是魔术常量,表示当前类名

                注册函数的另一种写法

                spl_autoload_register(‘self::load’);

            ② 加载视图

加载视图

            将后台首页的html文件放到 views/admin 中,然后编写方法。

            静态资源中的引用路径

top.html中的引用路径

            出于安全的考虑,浏览器是不能访问本地资源的。我们不能使用PHP常量路径输出,只能是使用网站的路径(相对路径或者写/)。

            注意:出于安全和效率的考虑,后台的静态资源直接存放到admin之下

            ③ 定义核心控制器

            在项目中,有很多控制器,其中有很多相同的功能,为了实现代码的重用,定义一个基础控制器,其他继承该控制器即可。

            该基础控制器的 功能 和 定义的位置。

            该控制器是前台和后台都会继承的,在其他项目中也可以使用,所以这个控制器和具体的业务逻辑没有关系,应该放到framework------>core中,称之为核心控制器。

            功能划分:

            1 实现操作后的跳转,并提示信息

跳转功能

            message.html 中

meta 标签
代码内容

            ④ 载入数据库模型

                在framework中写入Mysql.class.php数据库操作工具类文件 。

数据库模型

                Mysql中,主要定义的方法(主要是查询返回结果集的操作)

                getOne:获取第一条记录的第一个字段的值,返回单个值。

                getRow:获取单条记录,返回一位数组。

                getAll:获取所有的记录,返回二维数组。

                在我们的项目中,有多个模型,都需要完成增删改查操作。其中增删改比较特殊,他们的sql语句几乎是一样的,可以将其定义成自动完成,将其定义到基础模型中。

基础模型类

                配置数据库参数

配置文件位置
配置内容

               将配置信息要赋值到 超级全局变量config,然后需要载入基础控制器和基础模型,手动强制载入。

代码

            ⑤ 载入工具类和辅助函数

                比如载入 验证码 类,在基础控制器中实现

引入工具类

                其他控制器继承 基础控制器 后就可以引用 library 方法 来引入 验证码类

验证码类
使用方式

        三种加载方式

        APPlication主要就是数据模型库,控制器和视图。控制器和数据库模型有一个显著的特征,就是它们的名字特点,控制器以Controller 结尾,模型以 Model 结尾,使用自动加载来实现。

        Framework 中的一些类,类名和文件本身变化,不能使用自动加载,根据文件的重要程度,分为:强制手动加载 按需手动加载。

强制手动加载

            框架总结

MVC框架

                MVC搭建好后,只需要写 application中的内容,也就是mvc(ThinkPHP5中也是在application中写项目内容)

                 Controller:载入视图

                 View:html文件,嵌入php 输出从数据库读取的内容

                 Model:编写sql,调用db对象,如果是增删改,就直接使用自动完成

                  练习熟练了也很简单!!!!!!


    四 数据库设计(难点:以后加强对数据库设计的学习)

            PHPCMS系统    有数据库 表和字段的设计,值得参考和学习。

        ① 数据库设计要点分析

            字段类型,数据类型

            表间关系

            1 字段类型

            数值型:整型,tinyint、smallint、mediumint、int、bigint。小数,float、decimal;

            字符串:varchar、char、text、(enum和set,很特殊);

            日期时间型:date,time,datetime,timestamp。开发中,使用int表示比较常见的;

            没有布尔类型,布尔类型如何表示?用enum或者tinyint,用tinyint会方便些;

            如果能用小的,就尽量用小的,可以提升效率,节省资源。

            2 表间关系

            表间关系指的是表与表之间的联系。

            表A的一条记录对应表B中有多少条,表B的一条记录对应表A中有多少条。

            主要分为:一对一;一对多;多对多。

            一对一比较少见,多对多最难。

            一对多的表现形式:在多的一方,增加一个外键,关联到一的一方的主键。

            多对多的变现形式:将一个多对多的关系转换成两个一对多的关系,需要增加一张中间的关联表。

            示例:商品模块数据库设计

            数据库的开始,从核心开始。本项目的核心是商品,从goods表开始。

            图片的保存分为两个部分,图片本身上传到服务器的某个目录下,在将 它的路径 保存在表中字段。

            要点:如何将一张表变成两张表。

            判断所要表示的是否是同一种信息:商品信息,分类信息,品牌信息。

            关键它们的生命周期是否相同。

            在考虑商品的属性:① 通用属性,所有商品都具有的,比如名称,价格,图片等;②扩展属性,也叫规格参数,不同类型的商品其规格参数不同,手机有内存,摄像头像素,分辨率等,衣服有尺码,颜色,材质等。


    五 后台功能       

        1.后台实现流程及实施步骤说明

           首先完成:商品管理分类------->商品品牌管理-------->商品类型管理--------->后台登录管理

            其实:商品属性管理-------->商品管理

            实施步骤:1明确目标 ;2 业务逻辑分析(表结构和表间关系);3 编写代码实现(MVC);4 测试

脑图

          一控制器、一模型、一表,六个方法,三个视图!!!!!!

控制器
模型

        2.商品分类管理

            ① 明确目标:完成商品分类的增删该查(CRUD)

            ② 业务逻辑分析

数据结构

            parent_id:父分类id  ,涉及一个概念:    无限分类

            子类的parent_id 是 父类的 cat_id

            无限分类:给定一个分类,可以无限制的添加后代分类。

            如何实现无限分类呢?

            通常要从两个层面来考虑:

            数据库的层面,表设计,增加了一个parent_id的字段

            程序的层面,具体的实现,需要使用 递归的思想 。

            第⑤项 处理  无限分类  ↓↓↓↓↓↓↓

            ③ 显示添加分类表单

                引入cat_add.html文件到views文件夹下

控制器方法

            ④ 商品分类入库

                在cat_add.html 页面中

页面

                注意两点:

                     表单的action属性是否正确;

                     每一个表单域的属性,尽量保证和表中的字段名一致。

注意html文件
添加操作

            ⑤ 显示商品分类

控制器
cat_list.html
显示效果

                无限分类的处理(重点)

                重新排序,要按照分层的效果显示

递归
重新排序

            排序之后就是 缩进显示

给每个子集增加一个层级属性
html
显示效果

        ⑥ 修改商品分类

显示效果
传递当前选择项的id

            注意:编辑时,需要传递修改的当前分类的 cat_id!!!!!!!!

控制器
selectByPk
html页面
传递id
控制器中的修改操作操作

            注意:不能将当前分类的后代或者自己作为其上级分类

注意点

                解决方法

                 ①在显示的时候,不显示当前分类及其后代分类

                 ②在更新之前,判断,如果将当前分类的后代或者自己作为其上级分类,提示不允许。

                第二种处理的方式

获取该类的所有后代id
进行判断

            ⑦ 删除商品分类

                一定要传 删除商品的cat_id !!!!!

删除

                删除商品就像 删除文件夹,2种方法:1.类似递归删除,把父类下的所有子类都删了;2. 提示该类下有子类,不能删除,要先删除 子类,才能删除父类。

第二种方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,059评论 25 707
  • 第二周 20170819-20170825没有及时把记录发出来,但是绝对也没有偷懒哈。 20170819 周六 H...
    faithfu阅读 266评论 0 0
  • 人从出生到成长的每一天,都在不停的做出选择。 本人,善良,但从小到大就喜欢犹豫不决,拖泥带水,只好美名其曰的对每个...
    浅秋晗阅读 482评论 0 1
  • 这次聚会见到我的女神-朵妈,心情激动不已,初次见面的花粉们一点都不陌生,皆因同频相吸。 谁也想不到当初被她的网易博...
    Apple_2a9e阅读 169评论 0 0