PHP学习(十五)--PHP面向对象的程序设计

面向对象的介绍

面向对象程序设计(Object Orienten Programming, OOP)是一种计算机编程架构,OOP的一条基本原则是计算机及程序是由单个能够起到子程序作用的单元或对象组合而成,为了实现整体运算,每个对象都能接受信息、处理数据和向其他对象发送信息。OOP达到了软件工程的三个目标:重用性、灵活性和扩展性,使编程的代码更简洁、更易于维护,并且具有更强的可重用性。

类和对象的关系

在面向对象的编程语言中,类是一个独立的程序单位,是具有相同属性和服务的一组对象的结合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括成员属性和服务的方法两个主要部分。

对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,一个对象由一组属性和有权对这些属性进行操作的一组服务封装体。

抽象一个类

类的声明

类的声明和函数的声明比较相似,只需要使用一个关键字class后面加上一个自定义的类别名称,并加上一对花括号就可以了,有时也需要在class关键字的前面加一些修饰类的关键字,如abstract或final等,类的声明格式如下:

[一些修饰类的关键字]class 类名{
    类中成员;
}

类名和变量名还有函数名命名规则相似,都需要遵守PHP中自定义名称的命名规则。

成员属性

在类中直接声明变量就称为成员属性,可以在类中声明多个变量,即对象中有多个成员属性,每个变量都存储对象不同的属性信息。成员属性可以使用PHP中的标量类型和符合类型,所以也可以是其他类实例化的对象,但在类中使用资源和空类型没有意义。虽然在声明成员属性时可以给变量赋予初值,但是在声明类的时候是没有必要的。

[一些修饰类的关键字]class 类名{
    var $name;
    public $sex;
    private $age;
    static $abd;
}

成员方法

在对象中需要声明一些可以操作本对象成员属性的一些方法,来完成对象的一些行为。在类中直接声明的函数就称为成员方法,可以在类中声明多个函数,对象中就有多个成员方法。成员方法的声明和函数的声明完全一样,只不过可以见一些关键字的修饰来控制成员方法的一些权限。

[一些修饰类的关键字]class 类名{
    function abc(){
    }
}

对象就是把相关属性和方法组织在一起形成一个集合,在声明类时可以根据需求,有选择地声明成员,其中成员属性和成员方法都是可选的,可以只有成员 属性,可以只有成员方法,也可以没有成员。

通过类实例化对象

面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以同一个类的对象可以接受相同的请求。

实例化对象

将类实例化成对象非常容易,只使用new关键字并在后面加上一个和类名同名发方法。

$变量名 = new 类名称([参数列表]);

$变量名 = new 类名称;

一个类可以实例化多个对象,每个对象都是独立的。

对象类型在内存中的分配

内存结构在逻辑上被分为四段,分别是栈空间段、堆空间段、初始化数据段和代码段。

1.栈空间段:栈的特点是空间小但是被CPU访问的输的快,是用户存放程序中临时创建的变量。由于栈的先进先出的特点,所以栈特别方便用来保存和回复调用现场。

2.堆空间段:堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减,用于存储数据长度可变或占内存比较大的数据。

3.数据段:数据段用来存放可执行文件中已初始化全局变量。

4.代码段:代码段是用来存放可执行文件的操作指令,也就是可执行程序在内存中的景象。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入操作。

对象类型的数据就是一种占用空间比较大的数据类型,并且是占用的空间不定长的数据类型,所以对象创建完成以后被存放在堆内存中,但对象的引用名称是存放在栈里面的。程序在运行时,栈内存中的数据是可以直接存取的,而堆内存是不可以直接读取内存,但是可以通过对象的引用名称访问对象中的成员。

对象中成员的访问

对象中包含成员属性和成员方法,访问对象中的成员则包括成员你属性的访问和成员方法的访问。而对成员属性的访问则又包括复制操作和获取成员属性值操作。访问对象中的成员和访问数组中的元素类似,只能通过对象的引用来访问对象中的每个成员。但是还要使用一个特殊的运算符号”->”来完成该对象成员的访问。

$引用名 = new 类名称([参数列表]);
$引用名->成员属性 = 值;
echo $引用名->成员属性;
$引用名->成员方法;

特殊的对象引用“$this”

对象一旦被创建,在对象中的每个成员发放里面都会存在一个特殊的对象引用“$this”。成员方法属于哪个对象,$this引用就代表哪个对象,转呢过用来完成对象内部成员之间的访问。

构造方法和析构方法

构造方法和析构方法是对象中的两个特殊方法,它们都与对象的声明周期有关。构造方法是对象创建完成后第一个被对象自动调用的方法,而析构方法是对象在销毁之前最后一个对象自动调用的方法。所以通常用构造方法完成一些对象的初始化工作,使用析构方法完成一些对象在销毁前的清理工作。

1.构造方法:在每个生命的类中都有一个称谓构造方法的特殊成员方法,如果没有显示的声明它,类中都会默认存在一个灭幼参数列表并且内容为空的构造方法。如果显示的声明它,则类中默认构造方法将不会存在。当创建一个对象时,构造方法就会被自动调用一次,即每次使用关键字new来实例化对象时都会自动调用构造方法,不能主动通过对象的引用调用构造方法,所以通常使用构造方法执行一些有用的初始化任务。

function __contruct([参数列表]){
}

同一个类中只能声明一个构造方法,原因是构造方法名称是固定的,在PHP中不能声明同名的两个函数。

2.析构方法:西沟方法是PHP5中新添加的内容。析构方法允许在销毁一个对象之前执行一些特定操作。当堆内存段中的对象是去访问它的引用时,它就不能被访问了,也就成为垃圾对象了,通常对象的引用被赋予其他的值或者是在页面运行结束时,对象都会是去引用,在PHP中有一种垃圾回收的机制,当对象不能被访问时就会自动启动垃圾回收的程序,收回对象在堆中占用的内容空间,而析构方法正式垃圾回收程序回收对象之前调用的。

function __destruct(){
}

析构函数不能带有任何参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值