php-面向对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php-面向对象相关的知识,希望对你有一定的参考价值。
1、 面向对象:一种计算机编程的架构。把每个独立的功能模块抽象成类,形成对象,由多个对象组成这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用
特点:重用性、灵活性、扩展性;
面向对象符合人类看待事物的一般规律,采用面向对象方法可以使系统各部分各司其职、各尽所能。
2、类:类是具有相同属性(特征)和相同方法(行为)的一组对象的集合。
3、对象:用来描述客观事物的一个实体,它是构成系统的基本单位。
对象是一个由属性和有权对这些属性进行操作的封装体。
4、类和对象的关系:类的实例化就是对象,而对一类对象的抽象就是类。
5、类的实例化(即创建对象):通过关键字new来实例化。格式: 对象名字=new 类名{属性;方法}
6、访问对象的成员(属性和方法):外部访问,通过操作符:->(对象->成员)
内部访问,对象的方法通过$this访问本对象的成员属性或其他成员方法,即$this代表这个对象
7、构造方法:当创建一个对象的时候自动调用构造方法。
构造方法的声明和其他方法一样,只是它的方法名必须是__construct,这是php5的变化;以前的版本中构造方法的名字必须和类名一样。而使用前者的好处是,构造方法独立于类名,即当类名需要改变的时候,构造方法的名字不用跟着改变。
注意:一个类中只能有一个构造方法,不能主动调用,通常用来执行一些有用的初始化任务,如在创建对象的时候给成员属性赋初始值。
8、析构方法:允许在一个类被销毁前执行一些的操作或功能。
析构方法名称必须是__destruct,不能带参数。
9、封装性:
1.把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;
2.信息隐蔽,即尽可能隐藏对象的内部细节。
3.使用关键字private来对属性和方法进行封装。
注意:私有成员不能被外部访问,只能通过内部访问。
给类创建接口,可以为私有属性在外部提供设置和获取方法来操作私有属性。
10、类的继承extnds:
子类可以自动共享父类的数据和方法。单继承。提高了代码的重用性
11、重载新的方法:
PHP里面没有方法重载。不能重载也就是在你的项目中不能定义相同方法名的方法。
重载新的方法就是子类覆盖父类的已有的方法,我们需要在父类的基础上扩展就需要重载。
虽然说在PHP里面不能定义同名的方法,但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了。
一种是使用父类的“类名::”来调用父类中被覆盖的方法;一种是使用“parent::”的方试来调用父类中被覆盖的方法;
12、访问类型:对类成员的访问进行限制。public,private,protected
public,共有的,没有访问限制
private:私有的,内部可以访问,外部和子类不能访问
protected:保护的,内部和子类可以访问,外部不能访问
13、final,这个关键字只能定义类和方法,不能定义属性,因为final是常量的意思。使用final关键标记的类不能被继承,使用final关键标记的方法不能被子类覆盖,因为是最终版本。
14、static:
在类中描述的成员属性和成员方法是静态的
static成员能够限制外部的访问,因为static的成员是属于类的,是不属于任何对象实例,是在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程度对类该成员形成保护。
在类的外部不需要对象而使用类名就可以访问的到静态的成员。
类里面的静态方法只能访问类的静态的属性,在类里面的静态方法是不能访问类的非静态成员的,原因很简单,我们要想在本类的方法中访问本类的其它成员,我们需要使用$this这个引用,而$this这个引用指针是代表调用此方法的对象,我们说了静态的方法是不用对象调用的,而是使用类名来访问,所以根本就没有对象存在,也就没有$this这个引用了,没有了$this这个引用就不能访问类里面的非静态成员,又因为类里面的静态成员是可以不用对象来访问的,所以类里面的静态方法只能访问类的静态的属性,既然$this不存在,在静态方法中访其它静态成员我们使用的是一个特殊的类“self”;self和$this相似,只不过self是代表这个静态方法所在的类。所以在静态方法里,可以使用这个方法所在的类的“类名”,也可以使用“self”来访问其它静态成员,如果没有特殊情况的话,我们通常使用后者,即“self::成员属性”的方式。
在非静态方法里可不可以访问静态成员呢,当然也是可以的了,但是也不能使用“$this”引用也要使用类名或是“self::成员属性的形式”。
15、const是一个定义常量的关键字,用“const”修饰的成员属性的访问方式和“static”修饰的成员访问的方式差不多
16、抽象方法和抽象类
没有方法体的方法就是抽象方法,抽象方法就是为了方便继承而引入的.
在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字“abstract”来修饰。
只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类
抽象类也要使用“abstract”关键字来修饰;
在抽象类里面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明为抽象类,使用“abstract”来修饰。
最重要的一点就是抽象类不能产生实例对象,所以也不能直接使用。
将抽象方法是作为子类重载的模板使用的,定义抽象类就相当于定义了一种规范,这种规范要求子类去遵守,子类继承抽象类之后,把抽象类里面的抽象方法按照子类的需要实现。
子类必须把父类中的抽象方法全部都实现,否则子类中还存在抽象方法,那么子类还是抽象类,还是不能实例化对。
17、https://wenku.baidu.com/view/18b06794dd88d0d233d46a5e.html
18、接口:
接口是一种特殊的抽象类,它里面所有的方法都是抽象方法,接口里面不能声明变量,可以用const声明常量,所有成员的权限都是public,关键字是interface.
解决php不能多继承的问题。
因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象;它也作为一种规范,所有抽象方法需要子类去实现。 我们可以使用“extends”关键字让一个接口去继承另一个接口。
我们定义一个接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而不是我们前面所说的“extends”。
PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口,就相当于一个类要遵守多个规范,就像我们不仅要遵守国家的法律,如果是在学校的话,还要遵守学校的校规一样。
//使用implements实现多个接口 class Four implemtns接口一,接口二,….{ //必须把所有接口中的方法都要实现才可以实例化对象。}
PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口,一定要先继承类再去实现接口。
//使用extends继承一个类,使用implements实现多个接口class Four extends类名一implemtns接口一,接口二,….{ //所有接口中的方法都要实现才可以实例化对象………..}
19、多态
多态就是把子类对象赋值给父类引用,然后调用父类的方法,去执行子类覆盖父类的那个方法,但在PHP里是弱类型的,对象引用都是一样的不分父类引用,还是子类引用。
20、自动加载类__autoload
在用到什么类的时候,再把这个类所在的PHP文件导入
以上是关于php-面向对象的主要内容,如果未能解决你的问题,请参考以下文章