zoukankan      html  css  js  c++  java
  • php设计模式

    参考来源:https://designpatternsphp.readthedocs.io/zh_CN/latest/README.html#

    数据库单例模式代码:

     <?php
         //先建立单模:三私(私有变量、私有构造函数、私有的__clone函数)一公(公有方法),再封装连接数据库,以及返回结果
         class MySQLDB{
             //定义连接数据库需要用到的私有属性
             private $host;    //主机id
             private $port;    //端口号
             private $user;    //用户
             private $psw;    //密码
             private $dbname;        //数据库名称
             private $charset;        //字符集
     
             //定义静态变量保存当前类的实例
             private static $instance;
             //防止在外部实例化
             private function __construct($config){
                 $this -> initParam($config);//初始化参数-----实例化时自调用
                 $this -> initConn();//连接数据库-------因为已经初始化了,现在所有参数已经是我们需要的参数了,所以不需要再带参数了
                 $this -> initDB();//选择数据库
                 $this -> initCharset();//选择字符集
             }
     
             //防止在外部克隆
             private function __clone(){
     
             }
             //通过静态公有的方法获取这个类的实例
             public static function getInstance($config){
                 //当前对象不属于当前例就实例化,也就是静态变量在当前类中只能实例化一次,若是第一次实例化就实例化,若第二次实例化就返回一个当前的实例值。
                 if (!self::$instance instanceof self) {
                     self::$instance = new self($config);
                 }
                 return self::$instance;
             }
             //初始化成员变量
             private function initParam($config){
                 $this -> host = isset($config['host']) ? $config['host'] : 'localhost';
                 $this -> port = isset($config['port']) ? $config['port'] : 3306;
                 $this -> user = isset($config['user']) ? $config['user'] : 'root';
                 $this -> psw = isset($config['psw']) ? $config['psw'] : '';
                 $this -> dbname = isset($config['dbname']) ? $config['dbname'] : '';
                 $this -> charset = isset($config['charset']) ? $config['charset'] : 'utf8';
             }
             //连接数据库
             private function initConn(){
                 $link = mysql_connect("{$this -> host}:{$this -> port}" , $this->user ,$this->psw);
                 //判断数据库连接是否成功
                 if (!$link) {
                     echo "mysql连接错误,错误原因如下:<br />";
                     echo "错误代码:".mysql_errno().'<br />';
                     echo "错误信息:".mysql_error();
                     exit;
                 }
             }
             //选择数据库
             private function initDB(){
                 //mysql_select_db('{$this -> dbname}');
                 $this -> query("use `{$this -> dbname}`");
             }
             //选择字符集
             private function initCharset(){
                 //mysql_query('set names `{$this -> charset}`');
                 $this->query("set names {$this->charset}");
             }
             //封装一个执行SQL语句的方法
             /**
              * @param  $sql string 执行的SQL语句
              * @return $result 如果是数据查询语句返回结果集,如果是数据操作语句返回true,false
              */
             private function query($sql){
                 if (!$result = mysql_query($sql)) {
                     echo 'SQL语句执行失败。<br />';
                     echo '错误号是:'.mysql_errno().'<br />';
                     echo '错误信息:'.mysql_error().'<br />';
                     echo '错误的SQL语句是:'.$sql.'<br />';
                     exit;
                 }
                 return $result;
             }
     
             /**
              *    获得所有的数据
              *     @param  $sql string 执行SQL
              *     @param  $type string 匹配的类型     assoc||array||row 
              *     @return   $result array 返回值为二维数组
              */
             public function fetchAll($sql,$type = 'assoc'){
                 $res = $this -> query($sql); //返回的是资源的结果集
                 //定义一个数组来保存允许匹配的类型
                 $allow_array = array('assoc','array','row');
                 if (!in_array($type, $allow_array)) {
                     $type = 'assoc';
                 }
                 $fn = 'mysql_fetch_'.$type;
                 //将一条结果转成二维数组
                 $result = array();
                 while ($rows = $fn($res)) {
                     $result[] = $rows; 
                 }
                 return $result;
             }
     
             /**
              * *    获取一条数据
              *     @param  $sql string 执行SQL
              *     @param  $type string 匹配的类型     assoc||array||row 
              *     @return   $result array 返回值为一维数组
              */
             public function fetchRow($sql,$type = 'assoc'){
                 $result = $this -> fetchAll($sql,$type);
                 if(!empty($result)){
                     return $result[0];//返回第一行
                 }
                 return $result;
     
             }
     
             /**
              *     获取一行一列
              *     @param  $sql string 执行SQL
              *     @param  $type string 匹配的类型     assoc||array||row 
              *     @return   $result string 返回值为一行一列
              */
             public function fetchColumn($sql){
                 $result=$this->fetchRow($sql,'row');
                 if(!empty($result)){
                     return $result[0];    //返回一行一列
                 }
                 return $result;
             }
     
     
     
         }
         //设置响应头,防止乱码
         header('Content-type:text/html;charset=utf-8');
         $config = array(
             'host' => 'localhost',
             'port' => 3306,
             'user' => 'root',
             'psw' => 'mysql',
             'dbname' => 'oop',
             'charset' => 'utf8'    
             );
         $db = MySQLDB::getInstance($config);//获取对象的实例
         $rs = $db -> fetchAll('select * from star');//自己选择要执行的SQL语句
         echo '<pre>';
         var_dump($rs);
  • 相关阅读:
    java基础(初始化和清理)
    jquery的常用操作(转载)+ 开发中经常犯的错误总结(原创) (不断补充)
    java基础常见错误归纳(值传递和引用传递)
    FormPanel 综合使用 忆江南
    MyEclipse下Jquery代码自动提示 忆江南
    HQL查询 忆江南
    MD5密码保护 忆江南
    FormPanel数据提交 忆江南
    新手上路
    编码总结,以及对BOM的理解
  • 原文地址:https://www.cnblogs.com/laijinquan/p/14344883.html
Copyright © 2011-2022 走看看