概念
1、 OOP:Object Oriented Programming 面向对象编程
2、 OOA:Object-Oriented Analysis 面向对象分析
3、 OOD:Object-Oriented Design 面向对象设计
4、 对象只能有属性、方法、和常量
类-数据类型
对象-复杂的变量
属性-变量
function-方法、函数
类
类名不区分大小写
通过new关键字类实例化对象,实例化的过程就是分配内存的过程$stu = new Student();//实例化对象就是把对象的地址传递给$stu1变量
封装
a) public:公有的 可以在类的内部和外部访问
b) protected:受保护的 在整个继承链上访问
c) private:私有的 只能在类的内部访问
属性一般是私有的,通过公有的方法对私有的属性进行赋值和取值。这样做为了保证数据完整性
$this在类的内部使用,表示调用当前方法的对象
类、对象、属性、方法在内存中的表现
内存区域
静态区和常量区
代码区 <===> 类
堆区 <===> 对象
栈区 <===> 对象的变量,变量指向的是对象的地址
调用属性直接调用对象中的对应属性即可。
调用方法先获取对象所在的类,然后调用类中的方法。
类的本质是一个复杂的数据类型;对象的本质是内存中的空间,是一个复杂的变量
构造函数
__construct()
构造函数:在对象产生的时候自动调用
a) 可以传递不同的参数
b) 用来初始化成员变量(属性)
跟类名同名的方法也是构造方法;PHP中推荐使用__construct()做构造函数,且优先级较高
1 | <?php |
析构函数
__destruct()
析构函数:在对象销毁的时候自动调用
a) 析构函数不能有参数
继承(extends)
语法:
1 | Class 子类 extends 父类{ |
私有的属性也是可以被继承的
1 | <?php |
如果父类private私有属性重写的时候,无论子类属性是:public、protected、private都会生成性的属性;
如果父类是protected受把偶的属性时,子类不可以是private私有的。只能是protected、public,且属性会被重写;
如果父类是public公有的属性时,子类也只能是public公有的;
总之:父类属性不是私有状态,子类的属性就不能比父类属性的权限严格。
父类属性时私有状态是,子类的属性可以任何状态,重写则会被重新建立。
子类中调用父类的属性和方法
调用父类的属性和方法用$this关键字
调用父类的构造方法
通过parent和父类的类名来调用父类的构造函数
语法:parent::__construct()
父类类名::__construct()
如果子类有构造函数就调用子类的构造函数,如果子类没有就调用父类的构造函数
1、 继承:extends关键字
2、 $this:当前对象的引用
3、 parent:父类的类名
4、 私有属性也是可以被继承的
给父类的构造函数传递参数
1 | <?php |
1 | <?php |
protected 修饰的成员在整个继承连上访问
$this 表示当前对象的引用(地址)
A类 B类
private 不可访问
protected 不可访问
public 可以访问
父类 子类