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

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

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

1、类和对象的介绍使用

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

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

a0e2c2aec9456899d8d521ec63068568.png

2、构造方法和析构方法

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

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

9c5d5eb635d222f553137f6f98a72426.png

40ab8a57fb7cf2c1e47483cfbdaef057.png

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

7752eac0a505a4c90f81ef154d2b1c42.png

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

$this代表类的当前对象

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

d29ec6a320f82fe331d7f57afd505476.png

3、类的继承及final关键字

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

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

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

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

9472f69f65b9ca0d0a40a9b738f0382f.png

4、命名空间

6a3ca3dfcd8a949047857b83ab07f568.png都可以使用命名空间来区分

802c9b986cda9374378cd933f96f2fd3.png

cc06d7e72dc55ce14277d77349c43d33.png

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

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

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

bfd5f486e1f46d4fdb0eae3b9ee4c938.png

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

d7e6c1e868975b651d4a16e116c30183.png

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

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

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

84b7f71c7e2b890ee61c2dc55c2408f1.png

41366d4b95b80a42f2f9682f996e9640.png

09a142c65cc5bd1a07f4d9f43ac18c06.png

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

5、类的自动加载

9f200ade8ded07cc2f5495440bd91ff3.png

feb774f621306e22a253504e23cb4a2f.png

53cea304df8d0c340978e00ea185501e.png

82e8810a20c07db9fc0f34f69238893c.png

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

8a841ebc449b2b8c81b9711f67c57099.png

0760cbd37819fd9489f9c88394862394.png

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

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

区别:

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

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

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

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

1809214b985b6b0f3d05c200247f17d0.png

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

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

5f7d1ad5b96dc0d50c2c5f3ba8535822.png

总结:

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

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

6、后期的静态绑定

b3d0337ef3c500abe9edb534d418a14e.png

0196f5f94d0e938ec0795557267a5b58.png

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

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

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

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

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

7、魔术方法

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

2df39da3a9f7506790b8f2dec38da3ef.png

51fa1dd8eed8f71487467ac6386f0ebf.png

bb0abd163c9003b31eb6c3523e9e29cd.png

ffc25992b123eabfbcb34fcc0beb72f9.png

98525a5e13229c07c7df4b8f0c26116d.png

51d6cad14860c9db1e3aecafa8fb9171.png

231adbb3c2faea8dc57a4bd3aba913ad.png

---------------------------------------上面的都是属性,下面都是方法----------------------------

1040799e02e53982580eeeed7d74794c.png

61a140e8ad782f9853a56f5b022891fb.png

fece37b0a901cab07959aae38cdf4176.png

29348175c02808ccb9678ad92dc3c803.png

02f60cbffdd15838272f03c5c2f49375.png

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

d71f3b137698a6a2b9772a596f93ed75.png

7217b566fe35c77ad7cc0e1638066a3e.png

44c1f553afb78f3266abfba67c0cec36.png

8、对象拷贝和类型约束

1e4c0167a00cd1ed4d4eea991a82f024.png

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

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

b8a4dab2193c0ed3581fb5601a4fbf05.png

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

8d0696ecf60e8f0b3148486c8fdc6510.png

c659a0d6430ec0f8da497c27e0ecea42.png

bf08d56d748ea1cbccf064975927612e.png

c8c0f500e9ece5231a2bfcc52e9b82d1.png

3cff3f306d4428ce3b7000f7c121a652.png

变成了深拷贝。

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

0c9187079bb7eddb0d63277e7bd945b7.png

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

dbc46052cbf3d5b0e67e6eaaa8a47c01.png

9、Trait关键字

定义:

4d2aaaac9f86ecee58ba34c35495cefe.png

复用:

86a0767907ac7d42353900d7ab48cf2e.png

使用:

47b6b5aacf59a036f97347bc1687a652.png

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

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

099f97d9cbdb9cdaba36d5ac3161c1bd.png

9161ff647d22828e3bfb7f6c0147898d.png

e2c735c41a856fe76dd90dd82e16e867.png

Trait中也可以嵌套

ffc68a34a139f4d4f138297e8fe0ce33.png

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

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

567ffb2441ecf2616fa525866a01d392.png

e0c18b991611050c4d8c6e6188ad7b46.png

51ad7de38cc70695b7a3c0c07c14cc35.png

d83cef790c05397aa1da1e3b1126f9b3.png

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

a8d681dbac55e6182cc685c6c4bb61ad.png

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

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

abe780814bd18070bffb189370818c8a.png

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

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

1209f07898b04c0f4554674023b1d4da.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值