php基础复习函数、类、对象、设计模式....

面向对象的思想:项目代码都应该由单个能够起子程序作用的对象组成

面向对象的目标:重用、灵活、扩展性

1、类和对象的介绍使用

1、类的属性是变量,只不过这个变量是属于这个类的(类的变量,是属性)

2、怎么在类里面调用属性。只要拿到类的实例就可以,那就用$this咯,代表当前对象

php基础复习函数、类、对象、设计模式....

2、构造方法和析构方法

构造方法:实例化对象,做初始化工作。

New一个类的时候,会自动执行的一个方法

php基础复习函数、类、对象、设计模式....php基础复习函数、类、对象、设计模式....

析构方法:销毁对象(只要有这个方法在,执行完所有方法后会自动销毁)

php基础复习函数、类、对象、设计模式....

常量属于类,不属于对象。如果是属于对象的,可以在类里面通过$this访问

$this代表类的当前对象

Self:: 代表类本身,常量是属于类的,所以要用self::

php基础复习函数、类、对象、设计模式....

3、类的继承及final关键字

1、同名方法,子类会覆盖父类(重写)

2、子类没有构造方法,会自动调用父类的构造方法

3、类的继承不建议超过3

4、父类的方法中有final关键字,子类无法对该方法进行重写

php基础复习函数、类、对象、设计模式....

4、命名空间

php基础复习函数、类、对象、设计模式....都可以使用命名空间来区分

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

注意:10行的常量,定义在了类的外面。

注意:即使定义了命名空间,也要require包含该文件才能使用use否则找不到。因为你命名空间你use只是给了个路径,require才是引入,除非做了自动加载

 

Use(导入一个类)是因何而生??是因为不同命名空间下的类或函数...使用起来,要带上一个长长的名字,这样开发起来没效率

php基础复习函数、类、对象、设计模式....

注意:受命名空间影响的,都可以通过useas来加以区分及使用

php基础复习函数、类、对象、设计模式....

----------------------------上面是当前文件命名空间中调命名空间的----------------------------------

----------------------------下面是当前文件命名空间中调命名空间的----------------------------------

注意:当没有使用namespace的时候,该脚本处于全局命名空间

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

如果是函数和常量,他在当前命名空间下找不到,才会跑到全局命名空间下找(只有类不会这样)

5、类的自动加载

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

命名空间 + 类名 == 这个类的文件路径(2-4中642开始,讲路由模块)

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

属性加上static就变成类的属性了,不需要进行实例化,可以直接通过类名::进行访问(调用)是属于这个类的

原来的(不加static)的需要先new(因为他是属于对象的),在拿对象调这个属性。

 

区别:

加了static的属性、方法是类的属性和方法。比不加省一个步骤,这也是性能高的一方面,怪不得阿和说用静态呢,静态不用new

注意:静态方法中,不可以用非静态属性

不加static的属性、方法是对象的属性和方法。

 

下图:给9行的static去掉应该就可以了

php基础复习函数、类、对象、设计模式....

在子类中如何调用父类的静态方法??

注意:Parent代表的是父类本身,而不是父类的对象

php基础复习函数、类、对象、设计模式....

总结:

1、self代表类本身,Parent代表的是父类本身,只有$this才代表对象

2、Static的代表是该类的,不加static代表是对象的

6、后期的静态绑定

php基础复习函数、类、对象、设计模式....

php基础复习函数、类、对象、设计模式....

1、调用不存在的方法时,去父类中找。

2、10行如果是self就代表是当前类。

如果是static就相当于是告诉php根据上下文判断要调哪个类中的who()

然后php一看是21B调的,就告诉static根据上下文确定得出的结果是调用B类中的who()

此时后期静态绑定完成(应该也可以称为动态调用)

7、魔术方法

在外部不可访问的属性,只有private。魔术方法都是自动调用

php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
---------------------------------------上面的都是属性,下面都是方法----------------------------
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....

当对象以函数的方式被调用时

php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....

8、对象拷贝和类型约束

php基础复习函数、类、对象、设计模式....

浅拷贝:变量之间是地址传递的(引用传递:用的同一个地址,大家共享一个值。)

深拷贝:变量复制了一份(值传递:有2个地址,各管各的值

php基础复习函数、类、对象、设计模式....

Php默认对象的赋值是浅拷贝(使用clone就变成了深拷贝),变量赋值函数传值默认是深拷贝

php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....

变成了深拷贝。

__call魔术方法,当使用clone关键字(21行)的时候会(9行)自动调用

php基础复习函数、类、对象、设计模式....

类也是变量的一种类型(用类A做类型的约束

php基础复习函数、类、对象、设计模式....

9、Trait关键字

定义:

php基础复习函数、类、对象、设计模式....

复用:

php基础复习函数、类、对象、设计模式....

使用:

php基础复习函数、类、对象、设计模式....

无限复用:其他类中想使用 Trait中的方法也是直接use

也可以同时定义多个 Trait,在一个类中进行使用

php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
Trait中也可以嵌套

php基础复习函数、类、对象、设计模式....

10、接口类和抽象类及设计模式

接口中不能有方法体。类必须实现接口中的所有方法

php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....
php基础复习函数、类、对象、设计模式....

抽象类实现里面的某些方法(接口必须实现全部方法)

php基础复习函数、类、对象、设计模式....

单例模式:节省内存空间,因为每次实例化都需要开辟一块新的内存空间

静态属性来存储这个类的唯一实例

php基础复习函数、类、对象、设计模式....

工厂模式:负责用来创建类的实例

传进去一个类名,帮你实例化一个同名对象出来

php基础复习函数、类、对象、设计模式....