欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

派生类数据库 单利模式

程序员文章站 2022-05-29 21:55:53
...
派生类数据库 单利模式
  1. //要解决的问题 在一个方法中多次调用类
  2. //多次调用父类相同的类
  3. class Pdoo {
  4. public function __construct(){}
  5. //这是个数据库的类
  6. function select($name) {
  7. echo "正宗" . $name;
  8. }
  9. }
  10. class Conn {
  11. static $db;
  12. private function __construct() {
  13. }
  14. private function __clone() {
  15. }
  16. //返回的的是数据库的连接 而非Base类
  17. public static function getInstance() {
  18. if (self::$db == null) {
  19. self::$db = new Pdoo ();
  20. }
  21. return self::$db;
  22. }
  23. //这个方法是无效的
  24. function select($name) {
  25. echo $name;
  26. }
  27. }
  28. class Db {
  29. static $db;
  30. static $instanceInternalCache;
  31. private function __construct() {
  32. //初始话 跟连接数据库没有任何关系的
  33. }
  34. private function __clone() {
  35. }
  36. //不能在这里实例化
  37. public static function getDb() {
  38. }
  39. //这里解决 在同一个方法中多次调用A不会被多次实例化
  40. //解决不了多个派生类被实例化 也就是有多少派生类 数据库就要连接多少次
  41. public static function getInstance($model) {
  42. if (self::$instanceInternalCache [$model] == NULL) {
  43. self::$instanceInternalCache [$model] = new $model ();
  44. }
  45. return self::$instanceInternalCache [$model];
  46. }
  47. function select($name) {
  48. Conn::getInstance ()->select ( $name );
  49. }
  50. }
  51. class A extends Db {
  52. function s($name) {
  53. $this->select($name);
  54. }
  55. public static function instance() {
  56. return parent::getInstance ( __CLASS__ );
  57. }
  58. }
  59. class B extends Db {
  60. function s($name) {
  61. $this->select($name);
  62. }
  63. public static function instance() {
  64. return parent::getInstance ( __CLASS__ );
  65. }
  66. }
  67. class Main {
  68. public function t() {
  69. A::instance ()->select ( "1" );
  70. A::instance ()->select ( "11" );
  71. B::instance ()->select ( "2" );
  72. }
  73. }
  74. $t = new Main ();
  75. $t->t ();
复制代码