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 第三方库文件