PHP[OOP入门]PH02-魔术方法、继承、类常量、静态属性和方法、自动加载
该部分为 php 面向对象的入门部分,较为肤浅且参杂过分已经不是主流的知识。
这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。
day02-魔术方法、继承、类常量、静态属性和方法、自动加载
1、魔术方法
__get
__set
__construct:构造方法
__destruct:析构方法
触发时机:在这个对象被销毁的时候自动调用
在php中,不用内存管理,当脚本运行结束的时候,所有的空间全部销毁
弱类型 强类型
参数:没有参数
__unset:销毁一个变量
触发时机:当销毁私有成员属性的时候自动调用
参数:属性名
__isset:判断这个变量是否被设置过
触发时机:当在外部判断私有的成员属性是否被设置过时自动调用
参数:属性名
__invoke(了解)
触发时机:当将一个对象当作函数使用的时候自动调用
参数:当做函数的时候传递几个参数,这里就写几个参数
__toString(了解)
触发时机:当echo一个对象的时候自动调用
参数:没有参数
返回值:必须return一个字符串,这个字符串自己定制
__debugInfo(了解)
发现bug需要3秒钟,调试bug需要3个小时,dubug却需要一辈子
触发时机:通过var_dump来打印对象的时候自动调用
参数:没有参数
返回值:必须返回一个数组,该数组自己定制
__call
触发时机:当调用一个不存在的成员方法的时候自动调用
参数:函数名 由实参组成的一个数组
__callStatic(讲完静态方法时候再讲)
连贯操作
成员方法要返回$this
通过__call实现单字段查询
去处理特定的函数名,通过函数名得到字段名,根据参数得到字段值,然后拼接sql语句即可
2、继承
认识继承
生活上
体现在生物学中的继承
父类 子类
父类 子类
父类 子类
父类 子类
生物 动物 哺乳动物 人类 男人累
女人泪
从概念上来理解,生物是最大的
动物从生物衍生过来的,动物具有生物的特性,动物还有自己独有的特性,所以叫做动物
哺乳动物从动物衍生过来的,他不仅有动物的特性,其还有自己独有的特性,所以叫做哺乳动物
代码上
上面的特性就代表属性,属性最多的是男人累和女人泪,从属性方面来理解,是男人累大于人类,从属性方面来理解就是我们代码中的继承
基本概念
继承、派生
从代码上来理解,男人累继承自人类,人类继承自哺乳动物,继承的概念关注的是相同的属性
派生,其实继承和派生说的是同一个东西,只不过是从不同的角度来理解
父子类叫法
父类-》子类
基类-》派生类
单继承
单继承就是一个子类只能由一个父类,这种叫做单继承
php面向对象的语法是单继承,c++里面就是多继承
继承语法
基本语法
子类继承了父类,就拥有了父类的成员属性和成员方法
访问权限
类外 继承
public 公共的 可以 可以
private 私有的 不可以 不可以
protected 受保护的 不可以 可以
重写方法(重载)
重写作用
重写意思:当父类的方法子类继承过来之后,有时候这个方法并不太适合子类,这个时候我们就要在子类中重写这个方法
重写分两种:
完全重写
子类对象调用该方法调用的是重写后的方法,父类执行的还是之前的方法。
在父类的基础上增加一定的功能
通过parent关键字首先执行父类的方法,然后再增加自己的功能
parent关键字(普通方法、构造方法)
见代码8overwrite.php
final关键字(最后的,最终的)
final用来修饰class,代表这个类不能被继承
final用来修饰成员方法的时候代表这个方法不能被重写
重写中的方法权限修改
public
子类重写的时候权限还必须是public
protected
子类重写的时候权限必须是public或者protected
private protected public
后面的权限最大 重写的时候权限只能放大不能缩小
3、类常量
定义方式:
一般使用define在类外定义常量,使用const在类内定义常量
定义常量,前面不能加属性修饰符
调用方法
类外
类名::常量名 ($obj::常量名)
类内
self::常量名 self就是当前类名 ($this::常量名)
4、静态属性和静态方法
什么是静态属性和方法(static)
如果在成员属性或者成员方法前面加了static进行修饰,那么这个成员属性或者成员方法就不在属于某一个对象,而是属于整个类的
静态属性调用方法:
类外
类名::静态属性名 ($obj::静态属性名)
类内
self::静态属性名 ($this::静态属性名)
静态方法调用方法
类外
类名::静态方法名 ($obj::静态方法名,$obj->静态方法名)
类内
self::静态方法名 ($this::静态方法名,$this->静态方法名)
静态方法注意项
1、静态属性和静态方法前面可以加属性修饰符
2、静态属性和静态方法调用效率高
3、静态方法可以实现单例
4、静态方法中不能出现$this
5、自动加载(重点)
规则
在我们以后的工作中,一个类就是一个文件,文件名要和类名相同
__autoload
魔术方法:这个方法是唯一写在类外的方法
触发时机:当文件加载一个类的时候,并没有找到这个类,那么就会自动触发这个方法
参数:类名
目录(文件夹)结构
MVC:一种设计模式
model 数据模型
view 视图
controller 控制器
vendor 第三方库文件