php 单例类可以被继承吗,PHP单例模式实例分析【防继承,防克隆操作】

本文实例讲述了php单例模式。分享给大家供大家参考,具体如下:

//单列模式

// //1.普通类

// class singleton{

// }

// $s1 = new singleton();

// $s2 = new singleton();

// //注意,2个变量是同1个对象的时候才全等

// if ($s1 === $s2) {

// echo '是一个对象';

// }else{

// echo '不是一个对象';

// }

// //2.封锁new操作

// class singleton{

// protected function __construct(){}

// }

// $s1 = new singleton();//php fatal error: call to protected singleton::__construct()

// //3.留个接口来new对象

// class singleton{

// protected function __construct(){}

// public static function getins(){

// return new self();

// }

// }

// $s1 = singleton::getins();

// $s2 = singleton::getins();

// if ($s1 === $s2) {

// echo '是一个对象';

// }else{

// echo '不是一个对象';

// }

// //4.getins先判断实例

// class singleton{

// protected static $ins = null;

// private function __construct(){}

// public static function getins(){

// if (self::$ins === null) {

// self::$ins = new self();

// }

// return self::$ins;

// }

// }

// $s1 = singleton::getins();

// $s2 = singleton::getins();

// if ($s1 === $s2) {

// echo '是一个对象';

// }else{

// echo '不是一个对象';

// }

// //继承

// class a extends singleton{

// public function __construct(){}

// }

// echo '
';

// $s1 = new a();

// $s2 = new a();

// if ($s1 === $s2) {

// echo '是同一个对象';

// }else{

// echo '不是同一个对象';

// }

// //5.防止继承时被修改了权限

// class singleton{

// protected static $ins = null;

// //方法加final则方法不能被覆盖,类加final则类不能被继承

// final private function __construct(){}

// public static function getins(){

// if (self::$ins === null) {

// self::$ins = new self();

// }

// return self::$ins;

// }

// }

// $s1 = singleton::getins();

// $s2 = singleton::getins();

// if ($s1 === $s2) {

// echo '是同一个对象';

// }else{

// echo '不是同一个对象';

// }

// //继承

// // class a extends singleton{

// // public function __construct(){}

// // }

// //cannot override final method singleton::__construct()

// echo '


';

// $s1 = singleton::getins();

// $s2 = clone $s1;

// if ($s1 === $s2) {

// echo '是同一个对象';

// }else{

// echo '不是同一个对象';

// }

//6.防止被clone

class singleton{

protected static $ins = null;

//方法加final则方法不能被覆盖,类加final则类不能被继承

final private function __construct(){}

public static function getins(){

if (self::$ins === null) {

self::$ins = new self();

}

return self::$ins;

}

// 封锁clone

final private function __clone(){}

}

$s1 = singleton::getins();

$s2 = clone $s1; //call to private singleton::__clone() from context

if ($s1 === $s2) {

echo '是同一个对象';

}else{

echo '不是同一个对象';

}

希望本文所述对大家php程序设计有所帮助。

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值