博主信息
博文 119
粉丝 3
评论 1
访问量 121236
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
单例模式简单运用
赵大叔
原创
731人浏览过

一、单例模式

单例模式:创建类的唯一实例,不允许多次实例化一个类,例如数据库的连接有最大上限 1000,NEW 一次 PDO 就会多一个类实例,前面的连接如果没释放,就会增加一个,达到最大连接数以后,后面的就不无法再连接数据库了。

将类中的构造方式私有化private, 防止从外部通过 new 实例化这个类; 转为从类的内部将它实例化——>创建一个公共的静态方法,返回当前类的唯一实例

克隆方法私有化,防止克隆当前对象: private function __clone()

1.1 单例模式代码和应用 :

  1. <?php
  2. namespace app;
  3. // 单例模式连接数据库 应用程序跟设计库交互
  4. use pdo;
  5. interface idbBase
  6. {
  7. // 数据库连接curd
  8. static function insert($pdo, $data);
  9. static function select($pdo, $where = []);
  10. static function update($pdo, $username, $password);
  11. static function delete($pdo, $username);
  12. // 数据库连接
  13. static function connect($dsn, $user, $password);
  14. }
  15. // 单例模式连接数据库
  16. abstract Class aDB implements idbBase
  17. {
  18. private static $_instance;
  19. // 将类中的构造方式私有化, 防止从外部通过new实例化这个类
  20. private function __construct()
  21. {
  22. }
  23. // 克隆方法私有化,防止克隆当前对象
  24. private function __clone()
  25. {
  26. }
  27. static function connect($dsn, $user, $password)
  28. {
  29. // 创建aDB类的唯一实例 获取唯一的pdo对象
  30. if (is_null(self::$_instance)) {
  31. // echo 2;
  32. self::$_instance = new pdo($dsn, $user, $password);
  33. }
  34. return self::$_instance;
  35. }
  36. }
  37. // 单例模式: 创建类的唯一实例
  38. class DB extends aDB
  39. {
  40. // 数据库连接curd
  41. static function insert($pdo, $data){
  42. /* INSERT INTO `staffs` (`id`, `msnv`, `name`, `hiredate`, `donvi`, `congviec`, `luongtong`, `luongthuc`)
  43. VALUES (`id`, `msnv`, `name`, `hiredate`, `donvi`, `congviec`, `luongtong`, `luongthuc`) */
  44. $username = $data[0];
  45. $password = password_hash($data[1], PASSWORD_DEFAULT);
  46. $sql = "INSERT `users` (`username`, `password`) VALUES ($username,'$password');";
  47. // echo $sql;
  48. return $pdo->query($sql);
  49. }
  50. // 查询
  51. static function select($pdo, $where = ['id' => 1]){
  52. foreach ($where as $k => $v) {
  53. $sql = $k . ' > ' . $v;
  54. }
  55. return $pdo->query("SELECT * FROM `users` WHERE " . $sql)->fetchAll(PDO::FETCH_ASSOC);
  56. }
  57. static function update($pdo, $username, $password){
  58. $password = password_hash($password, PASSWORD_DEFAULT);
  59. $sql = "UPDATE `users` SET `password` = '$password' WHERE `id`= $username;";
  60. // "UPDATE `staffs` SET `donvi` = ? WHERE `id`= ?";
  61. return $pdo->query($sql);
  62. }
  63. static function delete($pdo, $username){
  64. // DELETE FROM 表名 WHERE 删除条件
  65. $sql = "DELETE FROM `users` WHERE `username`= '$username';";
  66. return $pdo->query($sql);
  67. }
  68. }
  69. //客户端代码
  70. $config = [
  71. 'type' => $type ?? 'mysql',
  72. 'host' => $host ?? 'localhost',
  73. 'dbname' => $dbname ?? 'help_10086',
  74. 'username' => $username ?? 'root',
  75. 'password' => $password ?? 'root',
  76. 'port' => $port ?? '3306',
  77. 'charset' => $charset ?? 'utf8'
  78. ];
  79. // extract() 函数从数组中将变量导入到当前的符号表。
  80. extract($config);
  81. // sprintf() 函数把格式化的字符串写入一个变量中。
  82. $dsn = sprintf('%s:host=%s;port=%s;charset=%s;dbname=%s', $type, $host, $port, $charset, $dbname);
  83. $pdo = DB::connect($dsn, $username, $password);
  84. // var_dump(DB::select($pdo));
  85. // $res = DB::insert($pdo,['900118','123456']);
  86. // var_dump(DB::update($pdo,'900118','456789'));
  87. var_dump(DB::delete($pdo,'900118'));
批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学