php基础复习函数、类、对象、设计模式....
面向对象的思想:项目代码都应该由单个能够起子程序作用的对象组成
面向对象的目标:重用、灵活、扩展性
1、类和对象的介绍使用
1、类的属性是变量,只不过这个变量是属于这个类的(类的变量,是属性)
2、怎么在类里面调用属性。只要拿到类的实例就可以,那就用$this咯,代表当前对象
2、构造方法和析构方法
构造方法:实例化对象,做初始化工作。
New一个类的时候,会自动执行的一个方法
析构方法:销毁对象(只要有这个方法在,执行完所有方法后会自动销毁)
常量属于类,不属于对象。如果是属于对象的,可以在类里面通过$this访问
$this代表类的当前对象
Self:: 代表类本身,常量是属于类的,所以要用self::调
3、类的继承及final关键字
1、同名方法,子类会覆盖父类(重写)
2、子类没有构造方法,会自动调用父类的构造方法
3、类的继承不建议超过3层
4、父类的方法中有final关键字,子类无法对该方法进行重写
4、命名空间
注意:10行的常量,定义在了类的外面。
注意:即使定义了命名空间,也要require包含该文件才能使用use否则找不到。因为你命名空间你use只是给了个路径,require才是引入,除非做了自动加载
Use(导入一个类)是因何而生??是因为不同命名空间下的类或函数...使用起来,要带上一个长长的名字,这样开发起来没效率
注意:受命名空间影响的,都可以通过use和as来加以区分及使用
----------------------------上面是当前文件无命名空间中调有命名空间的----------------------------------
----------------------------下面是当前文件有命名空间中调无命名空间的----------------------------------
注意:当没有使用namespace的时候,该脚本处于全局命名空间
如果是函数和常量,他在当前命名空间下找不到,才会跑到全局命名空间下找(只有类不会这样)
5、类的自动加载
命名空间 + 类名 == 这个类的文件路径(2-4中6分42开始,讲路由模块)
属性加上static就变成类的属性了,不需要进行实例化,可以直接通过类名::进行访问(调用)是属于这个类的。
原来的(不加static)的需要先new(因为他是属于对象的),在拿对象调这个属性。
区别:
加了static的属性、方法是类的属性和方法。比不加省一个步骤,这也是性能高的一方面,怪不得阿和说用静态呢,静态不用new。
注意:静态方法中,不可以用非静态属性
不加static的属性、方法是对象的属性和方法。
下图:给9行的static去掉应该就可以了
在子类中如何调用父类的静态方法??
注意:Parent代表的是父类本身,而不是父类的对象
总结:
1、self代表类本身,Parent代表的是父类本身,只有$this才代表对象
2、加Static的代表是该类的,不加static代表是对象的
6、后期的静态绑定
1、调用不存在的方法时,去父类中找。
2、第10行如果是self就代表是当前类。
如果是static就相当于是告诉php你根据上下文判断要调哪个类中的who()。
然后php一看是21行B类调的,就告诉static根据上下文确定得出的结果是调用B类中的who()。
此时后期静态绑定完成(应该也可以称为动态调用)
7、魔术方法
在外部不可访问的属性,只有private。魔术方法都是自动调用
当对象以函数的方式被调用时
8、对象拷贝和类型约束
浅拷贝:变量之间是地址传递的(引用传递:用的同一个地址,大家共享一个值。)
深拷贝:变量复制了一份(值传递:有2个地址,各管各的值)
Php中默认对象的赋值是浅拷贝(使用clone就变成了深拷贝),变量赋值函数传值默认是深拷贝
变成了深拷贝。
__call魔术方法,当使用clone关键字(21行)的时候会(9行)自动调用
类也是变量的一种类型(用类A做类型的约束)
9、Trait关键字
定义:
复用:
使用:
无限复用:其他类中想使用 Trait中的方法也是直接use。
也可以同时定义多个 Trait,在一个类中进行使用
10、接口类和抽象类及设计模式
接口中不能有方法体。类必须实现接口中的所有方法
抽象类实现里面的某些方法(接口必须实现全部方法)
单例模式:节省内存空间,因为每次实例化都需要开辟一块新的内存空间
静态属性来存储这个类的唯一实例
工厂模式:负责用来创建类的实例
传进去一个类名,帮你实例化一个同名对象出来