当前位置:Gxlcms > PHP教程 > 派生类数据库单利模式

派生类数据库单利模式

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

派生类数据库 单利模式
  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 ();

人气教程排行