代码块

  1. <?php
  2. /**
  3. * PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了
  4. *
  5. */
  6. //PHP单例模式只是针对单次页面级请求时,出现多个应用场景并需要共享同一对象资源时是非常有意义的。
  7. /**
  8. * 面向对象编程三大特性:
  9. * 1. 封装 可见性 php中使用3种类型的可见性 : private(私有), protected(保护),public(公共)
  10. * 封装一个程序元素, 把它设为private,仅在本类中可见,还可以把它设为protected,允许本类及其子类访问该属性; 要访问封装的对象, 必须提供公有的可见性. 想要作为一个真正有用的类, 必须至少提供一些方法是可见的(即使只是构造函数)
  11. *
  12. *
  13. * 2. 继承 inheritance
  14. * 一个类扩展另一个类,前者会拥有后者的所有属性和方法.
  15. * php oop具有单继承的特点 -> 带来程序的高耦合性:如果程序通过深层次继承绑定到具体类,即使对父类做简单的修改,也会对子类带来严重的破坏 -> 解决办法: 1. 为了保证类之间的松绑定,通常会继承抽象类,而且是浅继承,即只有一层子类. 2. 引入trait结构
  16. *
  17. *
  18. * 3. 多态 polymorphism 多态只有在oop上下文中讨论才有意义,多态真正价值在于,可以调用有相同接口的对象完成不同的工作. 基于一个公共接口, 在一个给定的程序结构中做出修改或增补时, 可以放心递请求或使用接口方法而不必担心程序会崩溃 一个名字多个实现
  19. *
  20. *
  21. * 接口通常允许开发人员创建松绑定的对象和类,php接口允许储存常量,实现接口的类都可以使用接口中储存的常量
  22. */
  23. //单例模式连接数据库 应用程序与数据库交互
  24. interface iDbBase
  25. {
  26. // 数据库操作 curd
  27. static function insert($db);
  28. static function select($db,$where=[]);
  29. static function delete($db,$where=[]);
  30. static function update($db,$data,$where);
  31. static function doConnect($dsn,$username,$password);
  32. // return $this;实现链式调用
  33. }
  34. //使用单例模式连接数据库
  35. abstract class aDb implements iDbBase
  36. {
  37. //创建类的唯一实例 唯一对象
  38. private static $instance;//保存返回的pdo连接对象
  39. //private关键字 阻止此类在外部进行实例化
  40. private function __construct()
  41. {
  42. }
  43. //private关键字阻止此类在外部进行克隆
  44. private function __clone()
  45. {
  46. }
  47. //只能由类的自身 来进行实例化
  48. static function doConnect($dsn,$username,$password){
  49. //判断$instance是否是aDb类的对象
  50. if(is_null(self::$instance))
  51. {
  52. // echo 'aaaa';
  53. //实例化本类, 传入连接参数,
  54. self::$instance = new PDO($dsn,$username,$password);
  55. }
  56. return self::$instance;
  57. }
  58. }
  59. //客户端代码
  60. // $config = [
  61. // 'type'=> $type ?? 'mysql',
  62. // 'host'=> $host ?? 'localhost',
  63. // 'dbname'=> $dbname ?? 'news',
  64. // 'username'=> $username ?? 'root',
  65. // 'password'=> $password ?? 'zhoujielun521'
  66. // ];
  67. // $dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);
  68. // $username = $config['username'];
  69. // $password = $config['password'];
  70. // // aDb::doConnect($dsn,$username,$password);
  71. // for ($i=0; $i < 10; $i++) {
  72. // aDb::doConnect($dsn,$username,$password);
  73. // }
  74. //工作类
  75. class Db extends aDb
  76. {
  77. // 数据库操作 curd
  78. static function insert($db)
  79. {
  80. return $db->query('insert into `admins`(`username`,`password`,`truename`,`gid`,`add_time`) value("asd","fdsa","dsadsas",2,4213) ')->fetchAll(PDO::FETCH_ASSOC);
  81. }
  82. static function select($db,$where=[])
  83. {
  84. return $db->query('SELECT * FROM `iuser` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
  85. }
  86. static function delete($db,$where=[])
  87. {
  88. }
  89. static function update($db,$data,$where)
  90. {
  91. }
  92. }
  93. //客户端代码
  94. $config = [
  95. 'type'=> $type ?? 'mysql',
  96. 'host'=> $host ?? 'localhost',
  97. 'dbname'=> $dbname ?? 'video',
  98. 'username'=> $username ?? 'root',
  99. 'password'=> $password ?? 'root'
  100. ];
  101. $dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);
  102. $username = $config['username'];
  103. $password = $config['password'];
  104. //获取pdo连接对象
  105. $db = Db::doConnect($dsn,$username,$password);
  106. echo '<pre>';
  107. print_r(Db::insert($db,));

效果

更多相关文章

  1. SpringBoot 项目配置 Swagger 接口api 搭建 REST
  2. 【PHP 面向对象】面向对象(OOP)编程知识点归纳总结(一)
  3. <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息
  4. <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露
  5. Python如何进行内存管理?
  6. Pandas Series对象有哪些属性?六大类!
  7. 1.jsp 三大指令 六大标签 九大内置对象 四大作用域
  8. 03-Vue_样式设置
  9. 序列化框架的选型和比对

随机推荐

  1. XDocument函数定义与用法汇总
  2. 谈谈减少垃圾的现状、前景与机遇
  3. 浅谈选单连动实例
  4. 关于XML元素的10篇课程推荐
  5. 方式性能函数定义与用法汇总
  6. XML交互入门教程
  7. XmlTextWriter函数定义与用法汇总
  8. DTD详解的内容推荐
  9. 有关XMLSerializer的文章推荐8篇
  10. 有关真可的文章推荐10篇