PHP设计模式二
2 单例模式
使用场景
使用数据库连接、cookie、上传等功能类时,保证实例只有一个,即引用地址只有一个。
简单实现
classSigle{protectedstatic $obj = null;protectedfunction__construct(){ }publicstaticfunctiongetInstance(){if(empty(self::$obj)){self::$obj = newself(); }returnself::$obj; }}$object1 = Sigle::getInstance();
以上代码存在问题,若Sigle被继承,构造可以被重写,将构造的访问权限改为public,则不再是单例模式。
优化
构造添加 final,防止继承被覆盖。
classSigle{protectedstatic $obj = null;finalprotectedfunction__construct(){ }publicstaticfunctiongetInstance(){if(empty(self::$obj)){self::$obj = newself(); }returnself::$obj; }finalprotectedfunction__clone(){ }}$object1 = Sigle::getInstance();
PHP中Final作用
final 关键字通过在定义方法、属性和常量之前加上 final 来防止被子类覆盖。
类被声明为 final,则不能被继承。
B站视频
【PHP架构师学习内容之设计模式】https://www.bilibili.com/video/BV1P441127kP?p=5&vd_source=f1bd3b5218c30adf0a002c8c937e0a27
