程序运行结果为: Fatal error: Call to private A::__construct() from invalid context in E:\PHPProjects\test.php on line 6 我们已经禁止外部用new实例化这个类,我们改如何让用户访问这个类呢?前门堵了,我们需要给用户留个后门。
解决办法是:static 修饰的方法,可以不经实例化一个类就可以直接访问这个方法。
//不能用new实例化的类.
程序运行结果为: $a1 的类是 A , $a2 是 A $a1 $a2 不是一个对象. 我们已经通过static方法返回了a的实例。但还有问题。我们如何保证我们多次操作获得的是同一个实例的呢? 解决办法:
static的属性在内部也只有一个。
static 属性能有效的被静态方法调用。将这个属性也设置成private,以防止外部调用。
先将这个属性设置成 null。每次返回对象前,先判断这个属性是否为 null 。
如果为 null 就创建这个类的新实例,并赋值给这个 static 属性。如果不为空,就返回这个指向实例的 static 属性。
//不能用new实例化的类.
程序运行结果为: $a1 的类是 A , $a2 是 A $a1 $a2 指向同一对象. 到此,我们写了一个最简单的单例模式 。 现在,你可以尝试写一个应用单例设计模式的数据库连接类。 要记住单例模式的使用效果和书写方式。 |
0
0
相关文章
如何有效防止PHP表单在页面加载或刷新时自动提交
PHP工厂模式应用实例_PHP构建设计模式的基本方法
用php源码怎么分析_用php源码分析逻辑与结构技巧【指南】
php框架的底层原理
DDD实践:Laravel项目中值对象与复杂数据模型的处理策略
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
热门下载
精品课程
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
共10课时 | 0.8万人学习
ThinkPHP6.x API接口--十天技能课堂
共14课时 | 1.1万人学习
前端基础到实战(HTML5+CSS3+ES6+NPM)
共162课时 | 18.7万人学习
最新文章










