php html小项目,PHP项目开发实例(一)(未使用框架)

这篇博客详细介绍了PHP的基础和MVC框架的学习,包括理解OOP思想、MVC模式及其优缺点,以及实际项目搭建的过程。作者通过构建一个B2C电子商城项目,阐述了项目结构、命名规范、数据库设计、后台功能实现等关键步骤,强调了代码的可维护性和逻辑思维的重要性。同时,还探讨了商品管理、分类、品牌等后台功能的实现流程。
摘要由CSDN通过智能技术生成

学习意义

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

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

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

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

用的环境是 phpStudy  5.3.29-nts + Apache

oop思想

OOP:Object Oriented Programming,面向对象编程,面向对象程序设计。

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

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

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

MVC思想

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

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

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

项目搭建

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

项目流程

入口文件 index.php

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

4f85f4042b63

项目流程

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

一  项目结构

4f85f4042b63

项目结构

4f85f4042b63

application结构目录

4f85f4042b63

controller结构目录

4f85f4042b63

view结构目录

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

4f85f4042b63

frame结构目录

4f85f4042b63

public结构目录

二 项目规范

命名规范

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

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

文件名

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

普通文件,文件名.php

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

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

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

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

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

③ 严格区分大小写

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

④ 注意缩进,代码对齐

三 项目搭建

① 定义核心启动类

framework中的需要写的功能:

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

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

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

初始化:定义路径常量

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

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

4f85f4042b63

入口文件

4f85f4042b63

初始化

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

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

4f85f4042b63

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

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

注册函数的另一种写法

spl_autoload_register(‘self::load’);

② 加载视图

4f85f4042b63

加载视图

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

静态资源中的引用路径

4f85f4042b63

top.html中的引用路径

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

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

③ 定义核心控制器

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

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

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

功能划分:

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

4f85f4042b63

跳转功能

message.html 中

4f85f4042b63

meta 标签

4f85f4042b63

代码内容

④ 载入数据库模型

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

4f85f4042b63

数据库模型

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

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

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

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

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

4f85f4042b63

基础模型类

配置数据库参数

4f85f4042b63

配置文件位置

4f85f4042b63

配置内容

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

4f85f4042b63

代码

⑤ 载入工具类和辅助函数

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

4f85f4042b63

引入工具类

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

4f85f4042b63

验证码类

4f85f4042b63

使用方式

三种加载方式

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

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

4f85f4042b63

强制手动加载

框架总结

4f85f4042b63

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 测试

4f85f4042b63

脑图

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

4f85f4042b63

控制器

4f85f4042b63

模型

2.商品分类管理

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

② 业务逻辑分析

4f85f4042b63

数据结构

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

子类的parent_id 是 父类的 cat_id

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

如何实现无限分类呢?

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

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

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

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

③ 显示添加分类表单

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

4f85f4042b63

控制器方法

④ 商品分类入库

在cat_add.html 页面中

4f85f4042b63

页面

注意两点:

表单的action属性是否正确;

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

4f85f4042b63

注意html文件

4f85f4042b63

添加操作

⑤ 显示商品分类

4f85f4042b63

控制器

4f85f4042b63

cat_list.html

4f85f4042b63

显示效果

无限分类的处理(重点)

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

4f85f4042b63

递归

4f85f4042b63

重新排序

排序之后就是 缩进显示

4f85f4042b63

给每个子集增加一个层级属性

4f85f4042b63

html

4f85f4042b63

显示效果

⑥ 修改商品分类

4f85f4042b63

显示效果

4f85f4042b63

传递当前选择项的id

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

4f85f4042b63

控制器

4f85f4042b63

selectByPk

4f85f4042b63

html页面

4f85f4042b63

传递id

4f85f4042b63

控制器中的修改操作操作

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

4f85f4042b63

注意点

解决方法

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

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

第二种处理的方式

4f85f4042b63

获取该类的所有后代id

4f85f4042b63

进行判断

⑦ 删除商品分类

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

4f85f4042b63

删除

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

4f85f4042b63

第二种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值