面向过程、面向对象
面向过程:就是事情自己来干,代买顺着写
面向对象:事情由别人来干
类、对象
类:是用于描述“某一些具有共同特征”的物体的概念,是某一类物体的总称。
对象:是指一个具体的“物体”,该物体隶属于某个“类别”(类)。
类成员(成员属性,成员方法)
类里面包含成员属性和方法
静态属性、静态方法
静态属性和方法,在定义的时候,前面加static
静态属性就是:只隶属于类本身——也可以看做是所有对象的“共有数据”。
静态属性的使用:
通过特殊的语法:::(双冒号语法,也叫范围解释符)
类::$静态属性名;
静态方法:方法前面加static
类名::静态方法名();
注意1:$this在静态方法中不能使用。
构造__construct()、析构方法__destruct()
构造方法:在实例化一个对象的同时,给对象赋值,创建完成就具有属性值
构造方法是“创建”对象的时候会自动调用。
1,该方法名字是固定的,为:__construct();
2,该方法必须是普通方法(不能是静态方法)
3,通常该方法应该是public
4,通常该方法中使用$this这个关键字来对属性进行赋值
5,当new 类名()的时候,其实是在调用该构造方法
6,如果一个类中定义了构造方法,则实例化该类时就会调用该方法,且实例化时的参数需要跟构造方法的参数匹配
析构方法:__destruct()
析构方法是“销毁”对象的时候会自动调用。
说明:
1,析构方法通常不太需要去定义。
2,析构方法不能调用。
3,析构方法不能有形参。
4,析构方法中可以用于清理一些在php代码结束后不能清理的数据,如生成的文件。
对象销毁的几个情形:
脚本程序运行结束,自动销毁;
明确地unset()一个对象变量,则被销毁;
改变对象变量的值,被销毁;
实际上,更本质来说,当一个对象(new 出来的对象)没有任何一个变量指向它的时候,该对象就会被自动销毁——自然,如果整个程序结束,也会销毁。
$this、self、parent
$this:$this是一个“伪对象”,代表当前所属类的当前对象。
Self:含义:代表当前类
使用:通常只能在某个类的某个方法内部代表该类的名称。
Parent:parent通常用于在子类中调用父类的成员的时候使用,多数通常就是使用父类的“静态类”成员。——因为parent代表的类,而非对象。
public、protected、private、static
Public:公用的(都可以用)
Protected:被保护的(可以在当前类或当前类的上下级具有继承关系的类中访问)
Private:私有的(只能在其所在的类中访问)
Static:静态的
重写、重载__set()__get()__isset()__unset()
重写:用在继承中,子类重写
下级的访问控制权限应该不低于上级的访问控制权限:
上级:public 下级:只能public
上级:protected 下级: protected, public
上级:private 下级:private protected public——实际此情况无意义。
私有的不能覆盖,而是完全当作自己全新的。
重载:用在类里面
取值:$v1 = 对象->属性;
赋值:对象->属性 = XX值;
判断是否存在:isset(对象->属性;)
销毁:unset(对象->属性;)
所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。
如果某属性不存在,但在语法中使用如下情形,则会发生:
取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法
赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法
判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法
销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法
前提都是:类中要预先定义好这些方法。
__call() 、__callStatic() 、__clone()
__call():
当使用一个对象调用一个不存在的普通方法的时候,会自动去调用预先定义好的"__call"方法。
其中,该方法必须带2个参数
__callStatic():当使用一个对象(类)调用一个不存在的静态方法的时候,会自动去调用预先定义好的"__callStatic"方法。其中,该方法必须带2个参数。
__clone():使用clone运算符进行克隆,则就也会“生成”新对象。
extends、abstract
Extends:继承,子类继承父类的属性和方法
Abstract:抽象方法
抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已。
前面需要加上abstract。
比如:abstract function f1($x1, $y, $m) ; //注意,后面一定有分号。
抽象方法有什么用?
其实跟抽象类一样,配合抽象类,来实现对下级类的“行为规范”。
即相当于要求下级类去完成该功能(动作),但自己是不做的。
单例:
一些类,从头到尾(程序运行的开始到结束),都只需要一个对象,就可以完成所有任务。
1、私有属性(值是对象)
Private 属性;
2、私有构造方法(不能new)
Private 方法;
3、提供获取对象的方法(这里面判断是否存在)
Function 方法;
4、私有克隆
Clone;
面向对象三大特性:封装、继承、多态
封装:将类封装,直接调用,只需要知道实现的效果,不需要知道怎么实现的
继承:子类继承父类
多态:多个子类继承于同一父类,但是子类本身属性不同