类和对象 =》模板和成品的关系
修饰符:
private 只能在类内部使用 protect 只能在继承链上使用 public 在任何地方都能使用
$this 在类内部可以调用类的属性和方法(类的实例化对象)
继承:
重名方法的时候,子类会覆盖父类方法。
在子类构造方法中执行 parent::__construct(); 那么实例化的时候,会先执行父类构造方法,再执行子类的构造方法。
final关键字:
final class A { } //这个类不能被继承 final function a(){ } //那么这个方法不能被重写 (否则会出错)
命名空间:
解决(类,常量,方法)的重名问题 ,通过 use 命名空间将类导入当前类中去,通过 use A\Student as s;来重命名。
没有定义命名空间的类,是全局空间,在使用类的时候,类前面加 \
类的自动加载 :
php内置函数:__autoload( $className ){ require $className . ‘.php’ } //当我们在实例化一个类时,如果发现这个类不存在,自动的会调用这个方法加载类文件(会丢弃)
推荐使用这个
或者这样:
使用:
static 关键字
后期静态绑定 : static类似self,区别是static代表的是调用方法的类,self代表类本身
魔术方法:
__get()获取不可访问的属性时
__set()设置不可访问的属性时
__issset()检测私有属性是否存在,当属性不可访问时,就会自动调用该魔术方法
__unset()删除不可访问的私有属性的时候,会自动调用
__call()调用不存在的方法时
__callStatic调用不存在的静态方法时
__invoke当对象以函数的方式调用时
__toString 当打印对象的时候
__clone 当使用clone关键字时自动调用
对象拷贝和类型约束:
对象拷贝有2种:浅拷贝(址传递:php中) ; 深拷贝(值传递)
默认是浅拷贝
可以通过clone 关键字,变成深拷贝
trait关键字:
php中的类只能单继承,trait突破类单继承的问题。可以使用trait关键字将原来需要继承的类改为用trait包含属性与方法, 同时使用use调用,trait也支持trait嵌套
接口类+抽象类+设计模式:
接口是类的模板,类是对象的模板。
接口类:(接口中方法不能有方法体)
单列模式:同一个类只被实例化一次,避免浪费系统资源
(不能被实例化,不能被拷贝)
工厂模式:负责创建类的实例