程序运行结果为: 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 指向同一对象. 到此,我们写了一个最简单的单例模式 。 现在,你可以尝试写一个应用单例设计模式的数据库连接类。 要记住单例模式的使用效果和书写方式。 |
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号