当前位置:Gxlcms > PHP教程 > PHP单例模式实例分析【防继承,防克隆操作】

PHP单例模式实例分析【防继承,防克隆操作】

时间:2021-07-01 10:21:17 帮助过:109人阅读

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

  1. <?php
  2. //单列模式
  3. // //1.普通类
  4. // class singleton{
  5. // }
  6. // $s1 = new singleton();
  7. // $s2 = new singleton();
  8. // //注意,2个变量是同1个对象的时候才全等
  9. // if ($s1 === $s2) {
  10. // echo '是一个对象';
  11. // }else{
  12. // echo '不是一个对象';
  13. // }
  14. // //2.封锁new操作
  15. // class singleton{
  16. // protected function __construct(){}
  17. // }
  18. // $s1 = new singleton();//PHP Fatal error: Call to protected singleton::__construct()
  19. // //3.留个接口来new对象
  20. // class singleton{
  21. // protected function __construct(){}
  22. // public static function getIns(){
  23. // return new self();
  24. // }
  25. // }
  26. // $s1 = singleton::getIns();
  27. // $s2 = singleton::getIns();
  28. // if ($s1 === $s2) {
  29. // echo '是一个对象';
  30. // }else{
  31. // echo '不是一个对象';
  32. // }
  33. // //4.getIns先判断实例
  34. // class singleton{
  35. // protected static $ins = null;
  36. // private function __construct(){}
  37. // public static function getIns(){
  38. // if (self::$ins === null) {
  39. // self::$ins = new self();
  40. // }
  41. // return self::$ins;
  42. // }
  43. // }
  44. // $s1 = singleton::getIns();
  45. // $s2 = singleton::getIns();
  46. // if ($s1 === $s2) {
  47. // echo '是一个对象';
  48. // }else{
  49. // echo '不是一个对象';
  50. // }
  51. // //继承
  52. // class A extends singleton{
  53. // public function __construct(){}
  54. // }
  55. // echo '<br>';
  56. // $s1 = new A();
  57. // $s2 = new A();
  58. // if ($s1 === $s2) {
  59. // echo '是同一个对象';
  60. // }else{
  61. // echo '不是同一个对象';
  62. // }
  63. // //5.防止继承时被修改了权限
  64. // class singleton{
  65. // protected static $ins = null;
  66. // //方法加final则方法不能被覆盖,类加final则类不能被继承
  67. // final private function __construct(){}
  68. // public static function getIns(){
  69. // if (self::$ins === null) {
  70. // self::$ins = new self();
  71. // }
  72. // return self::$ins;
  73. // }
  74. // }
  75. // $s1 = singleton::getIns();
  76. // $s2 = singleton::getIns();
  77. // if ($s1 === $s2) {
  78. // echo '是同一个对象';
  79. // }else{
  80. // echo '不是同一个对象';
  81. // }
  82. // //继承
  83. // // class A extends singleton{
  84. // // public function __construct(){}
  85. // // }
  86. // //Cannot override final method singleton::__construct()
  87. // echo '<hr>';
  88. // $s1 = singleton::getIns();
  89. // $s2 = clone $s1;
  90. // if ($s1 === $s2) {
  91. // echo '是同一个对象';
  92. // }else{
  93. // echo '不是同一个对象';
  94. // }
  95. //6.防止被clone
  96. class singleton{
  97. protected static $ins = null;
  98. //方法加final则方法不能被覆盖,类加final则类不能被继承
  99. final private function __construct(){}
  100. public static function getIns(){
  101. if (self::$ins === null) {
  102. self::$ins = new self();
  103. }
  104. return self::$ins;
  105. }
  106. // 封锁clone
  107. final private function __clone(){}
  108. }
  109. $s1 = singleton::getIns();
  110. $s2 = clone $s1; //Call to private singleton::__clone() from context
  111. if ($s1 === $s2) {
  112. echo '是同一个对象';
  113. }else{
  114. echo '不是同一个对象';
  115. }

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

人气教程排行