分享

PHP教程(15)面向对象介绍+类(定义+访问)+魔术方法(构造+析构)+对象传值比较+封装DB类

 知识书馆 2022-07-17 发布于广东

回顾

mysql:函数和存储过程

-- 创建表

create table my_name(name char(2) not null)charset utf8;

-- 定义全局变量

set @first = '甲乙丙丁戊己庚辛壬癸';

set @second = '子丑寅卯辰巳午未申酉戌亥';

-- 创建存储过程

delimiter $$

create procedure createName(in int_1 int)

begin

         --循环变量

         declare i int default 0;

         --获取姓氏和名字

         mywhile:while i < int_1 do

                   --获取姓名

                   set @name = substring(@first,round(rand() *9 + 1),1);

                   --获取名字

                   set @name = concat(@name,substring(@second,round(rand() * 11 + 1),1));

                   select name from my_name where name = @name into @temp_name;

                   if @temp_name is null then

                            --将名字插入数据库

                            insert into my_name values(@name);

                   else

                            --循环不算

                            iterate mywhile;

                   end if;

                   --改变循环变量

                   set i = i + 1;

         end while;

end

$$

delimiter ;

HTTP协议:HTTP请求和HTTP响应

         HTTP请求:请求行(请求方式 URI 协议版本),请求头,空行,请求数据(POST才有)、

         HTTP响应:状态行(协议版本 状态码状态描述),响应头,空行,响应体

状态码分类

         1XX:服务器正在接收

         2XX:服务器已经成功处理

         3XX:服务器告诉浏览器重定向

         4XX:请求错误

         5XX:服务器处理错误

常见的状态码

200ok,表示已经成功处理

302:重定向,浏览器应该直接发起新的请求,对应的就是location

403Forbidden,禁止访问,没有权限

404not found,找不到对应的文件

502:服务器从上级服务器接收结果时出现错误


需求:帮助传智播客做一套网上销售系统,卖教材。用户能够选择某一个商品,加入购物车,通过点击结算来生成订单,可以进行在线支付(银行支付+支付宝支付),用户可以查看订单状态,传智在收到确认订单之后,可以选择发货,有订单状态。

解决方案1:面向过程思想

以上方案能够解决问题,但是与现实生活中的真实处理有点不一样。

解决方案2:面向对象编程

面向对象编程

1.      什么是面向对象编程?

面向对象编程不是技术,是一种思想,是一种将程序的设计符合自然界中事务发展的规律的思想。

面向对象基本概念

在面向对象编程里有几个基本概念:类,实例化,对象(实例)

类是自然界中对某一类具有共同属性和能力的事务(实体)的集合(分类)

类指的是将拥有共同属性和能力的实体,将该共性抽离处理,形成文字的描述,最终转换成系统的所能识别的代码的过程称之为抽象。

类:是对象的抽象。

类关键字:class

语法:定义类

class 类名{

         //类成员

}

对象

自然界中存在的任何一个个体都称之为对象,对象必须与对应的类有关系。

对象:是类的实例化。对象也被称之为实例。

对象:是类的具象。

object

实例化

实例化就是从一个抽象的描述中去得到一个具体的个体的过程称之为实例化。

实例化:类得到对象的过程

实例化关键字:new

实例化的结果就是产生类的对象。

类成员

类成员:所有定义在类内部的结构,类里面只能有类成员,不能有任何其他的东西。

类成员:属性(变量),方法(能力:函数),类常量(定义在类里面的常量)

属性

定义在类中的变量

原因:类里面定义的属性,需要指定可以被访问的范围。在类中定义的属性需要使用访问修饰限定符来控制。

访问修饰限定符有三种:publicprotectedprivate

         public:公有的,属性可以在类意外的地方使用

         protected:受保护的,属性只能在类的内部使用(如果有继承,可以在子类内部使用)

         private:私有的,只能在当前类的内部使用,其他任何地方都不能使用

php5以前没有这三种访问修饰限定符,使用var关键字,var关键字默认的代表的意思就是public

属性与对象的关系:所有的属性都保存在对象里面

访问属性:属性是属于对象的,因此属性的访问应该是对象访问。

语法:

访问:对象变量->属性名;

修改:对象变量->属性名 = ;

方法

方法:类里面定义的函数

查看对象

说明:方法不在对象里面,说明一定是在类里面。

调用方法

方法依然是通过对象来进行调用

对象->方法名(实参列表);

访问修饰限定符的限制

类常量

定义在类里面的常量。

类常量必须使用const关键字定义

const 常量名 = ;

常量与对象的关系

常量不能通过对象访问

私有访问

对带有私有(private)关键字修饰的属性和方法的访问(protected与私有一样)。

private:只能在类的内部进行使用,只能在类中定义的方法的内部去使用。

在类的内部有一个关键字能够代表当前进入到类内部的对象:$this

$this只能在类的内部使用(只能在方法里面使用)

类与对象的内存分析

魔术方法

魔术方法也是一种方法,是一种在类内部定义的方法。魔术方法会在某个特定的情况下自动的被对象调用。

构造方法

构造方法就是对象在实例化之后会自动调用的方法。

语法:__construct()

构造方法的意义:给对象的属性进行初始化

兼容性构造方法

在低版本中没有构造方法__construct(),与其他语言一样,构造方法的名字与类名一致

兼容构造方法处理方式

析构方法

析构方法:对象被销毁的时候(销毁前),会自动调用的方法

语法:__destruct()

析构方法的意义:往往是为了释放内存(释放资源)

因为PHP不操作内存,通常内存都是交给操作系统去自动回收,所以在php中,析构方法使用的很少。

有哪些方式能够促使对象调用析构方法?

1.      unset对象对应的变量

2.      置空

3.      指向其他变量

对象传值(理解)

将一个对象所用的变量赋值给另外一个变量,只会产生一个对象。

对象之间的传递默认的就是引用传递

对象比较(理解)

对象比较比的是否属于同一个类,之后再进行属性的比较

封装DB

类名:DB

一个类应该单独存在于一个文件(一个文件中只有一个类定义),通常类文件的命名规范是:类名.class.php

1.      创建一个文件:DB.class.php

2.      定义属性

在定义任何属性和方法的时候,都应该尽量的增加类对属性和方法的控制(尽可能的让数据只在类内部才能被操作:访问修饰限定符), private->protected->public

3.      初始化属性:构造方法

4.      连接数据库:单独存在一个方法,专门用于连接数据库。

5.      设置字符集:单独存在方法,设置字符集

6.      SQL语句语法错误处理单独形成方法

7.      将所有要使用mysql_query执行的地方,调用db_query错误处理方法

8.      选择数据库:单独存在方法

9.      增加数据新增方法:返回自增长id

10.   增加查询数据的方法

a)        查询单行数据:一条记录,返回一个一维关联数组

b)        查询全部数据:多条记录,返回一个二维关联数组

删和改:返回的数据是受影响的行数:mysql_affected_rows();

作业:

         封装自己的DB

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多