PHP面向对象
面向对象程序设计(OOP)是一种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据进行封装,提高程序的重用性、灵活性、可拓展性。
面向对象的核心思想:对象、封装、可重用性和可拓展性。
**类是对象的抽象组织,对象是类的具体存在**
面向对象的三种访问关键字:
public #表示全局,类内部外部子类都可以访问
private #表示私有的,只有本类内部可以使用
protected #表示受保护的,只有本类或子类或父类中可以访问
类是我们对一组对象的描述
PHP中,每个类的定义使用关键字class开头,后面跟着类名,紧接着是花括号,包含着类的成员属性、成员方法。
类的命名规范:
(1) 类名只能使用字母,下划线开头,不能以数字开头
(2) 类名不能使用关键字
(3) 类名一定有意义
(4) 类名不区分大小写,但是最好使用驼峰法的写法 userModel UserModel
(5)类名不能重复
(6)Class Connect{ } 空类,空函数么有意义,空类是为了项目后期扩展预留的接口
类的定义实例代码:
class person{
public $name; // 成员属性
public $age; // 成员属性
public function say(){ // 成员方法
echo "my name is ". $this->name .", 今年 ".$this->age. " 岁。";
}
}
$student = new person(); // 实例化
$student->name = 'zhangsan'; // 调用类的成员方法并赋值
$student->age = 20;
$student->say(); // 调用成员方法,输出:my name is zhangsan ,今年20岁。
面向对象的魔术方法
魔术方法以两个下划线“ __ ”开头、具有特殊作用的一些方法。
__construct #构造方法,主要用于在创建对象的同时对属性赋值
__destruct #析构方法,主要作用为在某个对象的所有引用都被删除或者当对象被销毁时使用
__get #重载方法,当获取对象某个属性的值时,这个属性不存在,不会报错
__set #重载方法,当给对象某个属性赋值时,这个属性不存在,不会报错
__call #重载方法,当调用一个不可访问或者不存在的方法,会被使用
__toString #打印某个对象时使用,可以格式化输出对象所包含的数据信息
.....
PHP类的继承
php的类与类之间有一种关系,叫做继承关系(父和子),子类可以继承父类的属性、方法,同时子类也可以拥有一些自己的属性和方法,使用“ extend ”关键字继承。继承实现后,如果子类想调用父类中的方法,可以使用“ parent ”关键字;用“ self ” 调用自己本身所创建的一些方法和属性。
类之间的调用方法:
普通方法:
$student->say() #类的实例化名 -> 方法名();
静态方法:
$student::say() #类的实例化名::方法名(); 静态方法需要将“ -> ”替换为“ :: ”
PHP接口与抽象类的区别:
说到两者的区别,首先要知道什么是接口,什么是抽象类。
接口:使用“ interface ”关键字定义类,不需要实现类中的具体某法方法。接口中所有的方法必须使用公有方法(public),接口也是可以被继承的。如果想实现这个接口,使用“ implements ”关键字,需要注意的是,如果要实现接口,就需要把接口中定义的所有方法都实现,否则会报错,一个类实现接口时,必须要和接口中定义的方法名一致。
抽象类:一个被定义成抽象时,这个类就不能被实例化;如果一个类中,其中的某个方法被定义成为抽象方法,则这个类也需要定义为抽象类。
两者之间的区别:
对接口的继承使用implements,抽象类使用extends
接口中不可以声明变量,但可以声明类常量.抽象类中可以声明各种变量
接口没有构造函数,抽象类可以有
接口中的方法默认为public,抽象类中的方法可以用public,protected,private修饰
一个类可以继承多个接口,但只能继承一个抽象类
面向对象的设计原则:
面向对象有五大设计原则,分别为:单一职责原则、接口隔离原则、开放封闭原则、替换原则、依赖倒置原则。
单一职责原则:两个含义,一个是避免相同的职责分散到不同的类种,另一个是避免一个类承担太多的职责。
接口隔离原则:接口隔离原则是表明客户端不应该被强迫实现一些他们不需要的接口,应该将臃肿的接口拆分分组,使用多个接口进行替代,每个接口服务于一个模块。
开放关闭原则:
开放原则,模块的行为必须为开放式的,支持扩展
关闭原则:对于模块的扩展,不应该影响或者大面积影响现有程序
替换原则:子类必须能够替换父类,并且可以使用在父类所使用的地方,并合理的重用代码。
依赖倒置原则:上层模块不能依赖下层模块,他们共同依赖一个抽象,而抽象不能依赖一个具体,具体是要依赖抽象的。