PHP 设计模式之单例模式

本文介绍使用PHP实现单例模式下的数据库操作类,通过单例模式确保在整个应用中只存在一个实例,避免多次实例化带来的资源浪费。文章详细展示了如何创建数据库连接、设置字符集并实现带条件查询的方法。
  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. /**
  4. *单例模式实现 数据库操作类
  5. *实例化一次,赋值给静态变量,当再次调用类中方法,只需判断这个变量是否有值即可,无需再实例化类一次
  6. **/
  7. class db
  8. {
  9. public $conn;
  10. public static $sql;
  11. public static $instance=null;
  12. //构造方法和clone 方法设置为私有属性,防止外部访问
  13. private function __construct()
  14. {
  15. require_once "dbConfig.php";
  16. $this->conn=mysql_connect($db['host'],$db['user'],$db['password']);
  17. if (!mysql_select_db($db['database']))
  18. {
  19. echo '连接数据库失败';
  20. }
  21. mysql_query('set names utf8');
  22. }
  23. //private function __clone() {}; //覆盖克隆方法,禁止克隆
  24. //构造单实例方法
  25. public static function getInstance()
  26. {
  27. if (!(self::$instance instanceof self))
  28. {
  29. self::$instance=new db;
  30. }
  31. return self::$instance;
  32. }
  33. /*
  34. *数据库查询方法
  35. *@$table 表名
  36. *@$data 需要查询的条件数据
  37. *@$field 需要查询的字段
  38. */
  39. public function select($table,$data,$field=null)
  40. {
  41. $where='where 1=1';
  42. if (!empty($data))
  43. {
  44. foreach ($data as $key=>$val)
  45. {
  46. $where.=' and '.$key.'='."'$val'";
  47. }
  48. }
  49. $fieldstr='';
  50. if (!empty($field))
  51. {
  52. foreach ($field as $k=>$v)
  53. {
  54. $fieldstr.=$v.',';
  55. }
  56. $fieldstr=rtrim($fieldstr,',');
  57. }else
  58. {
  59. $fieldstr='*';
  60. }
  61. /**
  62. *构造sql语句
  63. *
  64. **/
  65. self::$sql="select {$fieldstr} from {$table} {$where}";
  66. $res=mysql_query(self::$sql,$this->conn);
  67. $i=0;
  68. $result=array();
  69. while($row=mysql_fetch_assoc($res))
  70. {
  71. foreach ($row as $key=>$val)
  72. {
  73. $result[$i][$key]=$val;
  74. }
  75. $i++;
  76. }
  77. return $result;
  78. }
  79. /**
  80. * insert update方法
  81. **/
  82. //public function insert(){};
  83. //public function update(){};
  84. }
  85. /**
  86. *
  87. *外部调用
  88. *
  89. **/
  90. $db=db::getInstance();
  91. $arr=$db->select('user',array('username'=>'luowj'),array('username','password'));
  92. var_dump($arr);
  93. ?>
下载前可以先看下教程 https://pan.quark.cn/s/16a53f4bd595 小天才电话手表刷机教程 — 基础篇 我们将为您简单的介绍小天才电话手表新机型的简单刷机以及玩法,如adb工具的使用,magisk的刷入等等。 我们会确保您看完此教程后能够对Android系统有一个最基本的认识,以及能够成功通过magisk root您的手表,并安装您需要的第三方软件。 ADB Android Debug Bridge,简称,在android developer的adb文档中是这么描述它的: 是一种多功能命令行工具,可让您与设备进行通信。 该命令有助于各种设备操作,例如安装和调试应用程序。 提供对 Unix shell 的访问,您可以使用它在设备上运行各种命令。 它是一个客户端-服务器程序。 这听起来有些难以理解,因为您也没有必要去理解它,如果您对本文中的任何关键名词产生疑惑或兴趣,您都可以在搜索引擎中去搜索它,当然,我们会对其进行简单的解释:是一款在命令行中运行的,用于对Android设备进行调试的工具,并拥有比一般用户以及程序更高的权限,所以,我们可以使用它对Android设备进行最基本的调试操作。 而在小天才电话手表上启用它,您只需要这么做: - 打开拨号盘; - 输入; - 点按打开adb调试选项。 其次是电脑上的Android SDK Platform-Tools的安装,此工具是 Android SDK 的组件。 它包括与 Android 平台交互的工具,主要由和构成,如果您接触过Android开发,必然会使用到它,因为它包含在Android Studio等IDE中,当然,您可以独立下载,在下方选择对应的版本即可: - Download SDK Platform...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值