辛星和您一起解析PHP中的单例模式
其实单例模式还是用的挺多的,要说到最经典的例子,可能就是操纵数据库的类了,它如果是单例的话,可以避免大量的new操作消耗资源,而如果系统中需要一个类来管理全局的信息,则把它用成单例也是很不错的,因为它是全局有效的,我们无需多次实例化。
下面是正确的调用方式示例:
<?phpclass Xin{ //保存该类的实例 private static $_instance; //不让外部调用该构造函数 private function __construct(){ echo "辛星加油"; } //用于获取实例,必须是静态的,否则外部无法调用 public static function get_instance(){ //如果该单例不存在,则创建它 if(!(self::$_instance instanceof self)){ self::$_instance = new self; } //返回它既可 return self::$_instance; } //不允许对象被克隆 public function __clone(){ trigger_error('Clone Denyed!',E_USER_ERROR); } //功能函数 public function xin(){ echo "调用Xin类的xin函数,辛星你好"; }}//正确的调用方式$xin = Xin::get_instance();$xin->xin();它的输出,我想读者也能猜到了:
辛星加油调用Xin类的xin函数,辛星你好
如果我们要克隆对象的话,比如下面代码:
立即学习“PHP免费学习笔记(深入)”;
<?phpclass Xin{ //保存该类的实例 private static $_instance; //不让外部调用该构造函数 private function __construct(){ echo "辛星加油"; } //用于获取实例,必须是静态的,否则外部无法调用 public static function get_instance(){ //如果该单例不存在,则创建它 if(!(self::$_instance instanceof self)){ self::$_instance = new self; } //返回它既可 return self::$_instance; } //不允许对象被克隆 public function __clone(){ trigger_error('Clone Denyed!',E_USER_ERROR); } //功能函数 public function xin(){ echo "调用Xin类的xin函数,辛星你好"; }}//克隆的时候会报错的$xin = Xin::get_instance();$qian = clone $xin;辛星加油( ! ) Fatal error: Clone Denyed! in D:\MyApp\wamp\www\err.php on line 22Call Stack
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号