您好,欢迎访问一九零五行业门户网

php实战第五天_PHP教程

php单态设计模式,我的理解,类中创建静态变量,使其只有一个,使用方法进行返回对象,该方法 检查对象是存在不存在就创建。从而实现单一对象。
将__construct()设置为private这样就new不了咯.self是本类的意思。“::”调用静态方法
[php]  show();
/*//直接new 会报错的噢!!!
    new myclass();
    new myclass();
new myclass();
    new myclass();
new myclass();
    new myclass();
    new myclass();
    new myclass();*/ 
 ?> 
show();
/*//直接new 会报错的噢!!!
 new myclass();
 new myclass();
 new myclass();
 new myclass();
 new myclass();
 new myclass();
 new myclass();
 new myclass();*/
 ?>
这个是小例子.下面给出 单态的 mysql类
[php]  db_mysql_hostname = $hostname_or_conf['hostname']; 
            $this->db_mysql_username = $hostname_or_conf['username']; 
            $this->db_mysql_password = $hostname_or_conf['password']; 
            $this->db_mysql_database = $hostname_or_conf['database']; 
            $this->db_mysql_port = isset($hostname_or_conf['port'])?$hostname_or_conf['port']:'3306'; 
            $this->db_mysql_charset = isset($hostname_or_conf['charset'])?$hostname_or_conf['charset']:'utf8'; 
        }elseif(!empty($hostname_or_conf)||!empty($username)||!empty($password)||!empty($database)) 
        { 
             $this->db_mysql_hostname = $hostname_or_conf; 
             $this->db_mysql_username = $username; 
             $this->db_mysql_password = $password; 
             $this->db_mysql_database = $database; 
             $this->db_mysql_port = $port; 
             $this->db_mysql_charset = $char;
}else{ 
            die('configuration error.'); 
        }
$server = $this->db_mysql_hostname.':'.$this->db_mysql_port; 
        $this->conn = mysql_connect($server,$this->db_mysql_username,$this->db_mysql_password,true) or die('connect mysql db error!'); 
        mysql_select_db($this->db_mysql_database,$this->conn) or die('select db error!'); 
        mysql_query(set names . $this->db_mysql_charset, $this->conn);
}
/**
     +----------------------------------------------------------
     * 设置数据对象值
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     *table,where,order,limit,data,field,join,group,having
     +----------------------------------------------------------
     */ 
    public function table($table){ 
        $this->query_list['table'] = $table; 
        return $this; 
    }
public function where($where){ 
        $this->query_list['where'] = $where; 
        return $this; 
    }
public function order($order){ 
        $this->query_list['order'] = $order; 
        return $this; 
    }
public function limit($offset,$length=null){ 
        if (is_null($length)) { 
            $this->query_list['limit']='limit '.$offset; 
            return $this; 
        }else { 
            if(!isset($length)){ 
                $length = $offset; 
                $offset = 0; 
            } 
                $this->query_list['limit'] = 'limit '.$offset.','.$length; 
                return $this; 
        }
}
public function data($data){ 
        //读取数据表字段,然后处理表单数据  
        $datalist = $this->getfields($this->query_list['table']); 
        $arr=array(); 
        foreach ($datalist as $key=>$value) { 
            if (array_key_exists ($key,$data) ) { 
                $arr[$key]=$data[$key]; 
            }

        //var_dump($arr);  
        /*
        if(is_object($data)){
            $data   =   get_object_vars($data);
        }elseif (is_string($data)){
            parse_str($data,$data);
        }elseif(!is_array($data)){
            //log:data_type_invalid
        }
        */ 
        $this->query_list['data'] = $arr; 
        return $this; 
    } 
    public function field($fields){ 
        $this->query_list['fields'] = $fields; 
        return $this; 
    } 
    public function join($join){ 
        $this->query_list['join'] = $join; 
        return $this; 
    } 
    public function group($group){ 
        $this->query_list['group'] = $group; 
        return $this; 
    } 
    public function having($having){ 
        $this->query_list['having'] = $having; 
        return $this; 
    } 
    /**
     +----------------------------------------------------------
     * 查询
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
    public function select(){ 
        $select_sql = 'select '; 
        $fields = isset($this->query_list['fields'])?$this->query_list['fields']:'*'; 
        $select_sql.=$fields; 
        $select_sql.= ' from `'.$this->query_list['table'].'` ';
isset($this->query_list['join'])?($select_sql.=$this->query_list['join']):''; 
        isset($this->query_list['where'])?($select_sql.=' where '.$this->query_list['where']):''; 
        isset($this->query_list['group'])?($select_sql.=' group by'.$this->query_list['group']):''; 
        isset($this->query_list['having'])?($select_sql.=' mysql having '.$this->query_list['having']):''; 
        isset($this->query_list['order'])?($select_sql.=' order by '.$this->query_list['order']):''; 
        isset($this->query_list['limit'])?($select_sql.=' '.$this->query_list['limit']):''; 
    //  echo '----->'.$select_sql;  
        return $this->query($select_sql); 
    } 
    /**
     +----------------------------------------------------------
     * 增加
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
    public function add(){ 
        $add_sql = 'insert into `'.$this->query_list['table'].'` (';
$data = $this->query_list['data']; 
        $value = $field = ''; 
        foreach($data as $k=>$v){ 
            $field .= '`'.$k.'`,'; 
            if(is_numeric($v)) 
                $value .= $v.','; 
            else 
                $value .= '\''.$v.'\','; 
        } 
        $add_sql .= rtrim($field,',').') values ('.rtrim($value,',').')';
//  echo 'add_sql'.$add_sql;  
        return $this->execute($add_sql); 
    } 
    /**
     +----------------------------------------------------------
     * 删除
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
    public function delete(){ 
        $del_sql = 'delete from `'.$this->query_list['table'].'` where '.$this->query_list['where'];
if(isset($this->query_list['order'])) 
            $del_sql .= 'order by '.$this->query_list['order']; 
        if(isset($this->query_list['limit'])) 
            $del_sql .= ' '.$this->query_list['limit'];
return $this->execute($del_sql);

    /**
     +----------------------------------------------------------
     * 更新
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
    public function update(){ 
        $update_sql = 'update `'.$this->query_list['table'].'` set '; 
        $data = $this->query_list['data'];
foreach($data as $k=>$v){ 
            if(is_numeric($v)) 
                $update_sql .= '`'.$k.'` ='.$v.','; 
            else 
                $update_sql .= '`'.$k.'` =\''.$v.'\','; 
        } 
        $update_sql = rtrim($update_sql,','); 
        if(isset($this->query_list['where'])) 
            $update_sql .= ' where '.$this->query_list['where']; 
        if(isset($this->query_list['order'])) 
            $update_sql .= ' order by '.$this->query_list['order']; 
        if(isset($this->query_list['limit'])) 
            $update_sql .= ' '.$this->query_list['limit'];
return $this->execute($update_sql);

     /**
     +----------------------------------------------------------
     * 执行查询 返回数据集
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param string $sql  sql指令
     */ 
    public function query($sql) { 
        if ( !$this->conn ) return false; 
        $this->querystr = $sql; 
        //释放前次的查询结果  
        if ( $this->queryid ) {    $this->free();    }
$this->query_start_time = microtime(true);
$this->queryid = mysql_query($sql, $this->conn); 
        $this->query_count++; 
        if ( false === $this->queryid ) { 
            $this->error(); 
            return false; 
        } else { 
            $this->numrows = mysql_num_rows($this->queryid); 
            return $this->getall(); 
        } 
    } 
    /**
     +----------------------------------------------------------
     * 执行语句
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param string $sql  sql指令
     +----------------------------------------------------------
     */ 
    public function execute($sql) { 
        if ( !$this->conn ) return false; 
        $this->querystr = $sql; 
        //释放前次的查询结果  
        if ( $this->queryid ) {    $this->free();    }
$this->query_start_time = microtime(true);
$result =   mysql_query($sql, $this->conn) ; 
        $this->query_count++; 
        if ( false === $result) { 
            $this->error(); 
            return false; 
        } else { 
            $this->numrows = mysql_affected_rows($this->conn); 
            return $this->numrows; 
        } 
    } 
    /**
     +----------------------------------------------------------
     * 获得所有的查询数据
     +----------------------------------------------------------
     * @access private
     +----------------------------------------------------------
     * @return array
     */ 
    private function getall() { 
        //返回数据集  
        $result = array(); 
        if($this->numrows >0) { 
            while($row = mysql_fetch_assoc($this->queryid)){ 
                $result[]   =   $row; 
            } 
            mysql_data_seek($this->queryid,0); 
        } 
        return $result; 
    } 
    /**
     +----------------------------------------------------------
     * 取得数据表的字段信息
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     */ 
    public function getfields($tablename) { 
        $result =   $this->query('show columns from `'.$tablename.'`'); 
        $info   =   array(); 
        if($result) { 
            foreach ($result as $key => $val) { 
                $info[$val['field']] = array( 
                    'name'    => $val['field'], 
                    'type'    => $val['type'], 
                    'notnull' => (bool) ($val['null'] === ''), // not null is empty, null is yes  
                    'default' => $val['default'], 
                    'primary' => (strtolower($val['key']) == 'pri'), 
                    'autoinc' => (strtolower($val['extra']) == 'auto_increment'), 
                ); 
            } 
        } 
        return $info; 
    } 
    /**
     +----------------------------------------------------------
     * 取得数据库的表信息
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     */ 
    public function gettables($dbname='') { 
        if(!empty($dbname)) { 
           $sql    = 'show tables from '.$dbname; 
        }else{ 
           $sql    = 'show tables '; 
        } 
        $result =   $this->query($sql); 
        $info   =   array(); 
        foreach ($result as $key => $val) { 
            $info[$key] = current($val); 
        } 
        return $info; 
    }
/**
     +----------------------------------------------------------
     * 最后次操作的id
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
     public function last_insert_id(){ 
        return mysql_insert_id($this->conn); 
    } 
    /**
     * 执行一条带有结果集计数的
     */ 
    public function count($sql){ 
        return $this->execute($sql); 
    } 
    /**
     +----------------------------------------------------------
     * 启动事务
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @return void
     +----------------------------------------------------------
     */ 
    public function starttrans() { 
        if ($this->transtimes == 0) { 
            mysql_query('start transaction', $this->conn); 
        } 
        $this->transtimes++; 
        return ; 
    }
/**
     +----------------------------------------------------------
     * 提交事务
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @return boolen
     +----------------------------------------------------------
     */ 
    public function commit() 
    { 
        if ($this->transtimes > 0) { 
            $result = mysql_query('commit', $this->conn); 
            $this->transtimes = 0; 
            if(!$result){ 
                throw new exception($this->error()); 
            } 
        } 
        return true; 
    }
/**
     +----------------------------------------------------------
     * 事务回滚
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @return boolen
     +----------------------------------------------------------
     */ 
    public function rollback() 
    { 
        if ($this->transtimes > 0) { 
            $result = mysql_query('rollback', $this->conn); 
            $this->transtimes = 0; 
            if(!$result){ 
                throw new exception($this->error()); 
            } 
        } 
        return true; 
    } 
    /**
     +----------------------------------------------------------
     * 错误信息
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
     public function error() { 
        $this->error = mysql_error($this->conn); 
        if('' != $this->querystr){ 
            $this->error .= \n [ sql语句 ] : .$this->querystr; 
        } 
        return $this->error; 
    } 
    /**
     +----------------------------------------------------------
     * 释放查询结果
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     */ 
    public function free() { 
        @mysql_free_result($this->queryid); 
        $this->queryid = 0; 
        $this->query_list = null; 
    } 
    /**
     +----------------------------------------------------------
     * 关闭连接
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param 
     +----------------------------------------------------------
     */ 
    function close(){ 
        if ($this->conn && !mysql_close($this->conn)){ 
            throw new exception($this->error()); 
        } 
        $this->conn = 0; 
        $this->query_count = 0; 
    } 
    /**
     +----------------------------------------------------------
     * 析构方法
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     */ 
    function __destruct(){ 
         $this->close(); 
    } 

db_mysql_hostname = $hostname_or_conf['hostname'];
            $this->db_mysql_username = $hostname_or_conf['username'];
            $this->db_mysql_password = $hostname_or_conf['password'];
            $this->db_mysql_database = $hostname_or_conf['database'];
            $this->db_mysql_port = isset($hostname_or_conf['port'])?$hostname_or_conf['port']:'3306';
            $this->db_mysql_charset = isset($hostname_or_conf['charset'])?$hostname_or_conf['charset']:'utf8';
        }elseif(!empty($hostname_or_conf)||!empty($username)||!empty($password)||!empty($database))
        {
             $this->db_mysql_hostname = $hostname_or_conf;
             $this->db_mysql_username = $username;
             $this->db_mysql_password = $password;
             $this->db_mysql_database = $database;
             $this->db_mysql_port = $port;
             $this->db_mysql_charset = $char;
}else{
            die('configuration error.');
        }
$server = $this->db_mysql_hostname.':'.$this->db_mysql_port;
        $this->conn = mysql_connect($server,$this->db_mysql_username,$this->db_mysql_password,true) or die('connect mysql db error!');
        mysql_select_db($this->db_mysql_database,$this->conn) or die('select db error!');
        mysql_query(set names . $this->db_mysql_charset, $this->conn);
    }
/**
     +----------------------------------------------------------
     * 设置数据对象值
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     *table,where,order,limit,data,field,join,group,having
     +----------------------------------------------------------
     */
 public function table($table){
  $this->query_list['table'] = $table;
  return $this;
 }
public function where($where){
  $this->query_list['where'] = $where;
  return $this;
 }
public function order($order){
  $this->query_list['order'] = $order;
  return $this;
 }
public function limit($offset,$length=null){
  if (is_null($length)) {
   $this->query_list['limit']='limit '.$offset;
   return $this;
  }else {
   if(!isset($length)){
    $length = $offset;
    $offset = 0;
   }
    $this->query_list['limit'] = 'limit '.$offset.','.$length;
    return $this;
  }
 }
public function data($data){
  //读取数据表字段,然后处理表单数据
  $datalist = $this->getfields($this->query_list['table']);
  $arr=array();
  foreach ($datalist as $key=>$value) {
   if (array_key_exists ($key,$data) ) {
    $arr[$key]=$data[$key];
   }
}
  //var_dump($arr);
  /*
  if(is_object($data)){
   $data   =   get_object_vars($data);
  }elseif (is_string($data)){
   parse_str($data,$data);
  }elseif(!is_array($data)){
   //log:data_type_invalid
  }
  */
  $this->query_list['data'] = $arr;
  return $this;
 }
 public function field($fields){
  $this->query_list['fields'] = $fields;
  return $this;
 }
 public function join($join){
  $this->query_list['join'] = $join;
  return $this;
 }
 public function group($group){
  $this->query_list['group'] = $group;
  return $this;
 }
 public function having($having){
  $this->query_list['having'] = $having;
  return $this;
 }
 /**
     +----------------------------------------------------------
     * 查询
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param
     +----------------------------------------------------------
     */
 public function select(){
  $select_sql = 'select ';
  $fields = isset($this->query_list['fields'])?$this->query_list['fields']:'*';
  $select_sql.=$fields;
  $select_sql.= ' from `'.$this->query_list['table'].'` ';
isset($this->query_list['join'])?($select_sql.=$this->query_list['join']):'';
  isset($this->query_list['where'])?($select_sql.=' where '.$this->query_list['where']):'';
  isset($this->query_list['group'])?($select_sql.=' group by'.$this->query_list['group']):'';
  isset($this->query_list['having'])?($select_sql.=' mysql having '.$this->query_list['having']):'';
  isset($this->query_list['order'])?($select_sql.=' order by '.$this->query_list['order']):'';
  isset($this->query_list['limit'])?($select_sql.=' '.$this->query_list['limit']):'';
 // echo '----->'.$select_sql;
  return $this->query($select_sql);
 }
 /**
     +----------------------------------------------------------
     * 增加
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param
     +----------------------------------------------------------
     */
 public function add(){
  $add_sql = 'insert into `'.$this->query_list['table'].'` (';
$data = $this->query_list['data'];
  $value = $field = '';
  foreach($data as $k=>$v){
   $field .= '`'.$k.'`,';
   if(is_numeric($v))
    $value .= $v.',';
   else
    $value .= '\''.$v.'\',';
  }
  $add_sql .= rtrim($field,',').') values ('.rtrim($value,',').')';
 // echo 'add_sql'.$add_sql;
  return $this->execute($add_sql);
 }
 /**
     +----------------------------------------------------------
     * 删除
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param
     +----------------------------------------------------------
     */
 public function delete(){
  $del_sql = 'delete from `'.$this->query_list['table'].'` where '.$this->query_list['where'];
if(isset($this->query_list['order']))
   $del_sql .= 'order by '.$this->query_list['order'];
  if(isset($this->query_list['limit']))
   $del_sql .= ' '.$this->query_list['limit'];
return $this->execute($del_sql);
}
 /**
     +----------------------------------------------------------
     * 更新
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param
     +----------------------------------------------------------
     */
 public function update(){
  $update_sql = 'update `'.$this->query_list['table'].'` set ';
  $data = $this->query_list['data'];
foreach($data as $k=>$v){
   if(is_numeric($v))
    $update_sql .= '`'.$k.'` ='.$v.',';
   else
    $update_sql .= '`'.$k.'` =\''.$v.'\',';
  }
  $update_sql = rtrim($update_sql,',');
  if(isset($this->query_list['where']))
   $update_sql .= ' where '.$this->query_list['where'];
  if(isset($this->query_list['order']))
   $update_sql .= ' order by '.$this->query_list['order'];
  if(isset($this->query_list['limit']))
   $update_sql .= ' '.$this->query_list['limit'];
return $this->execute($update_sql);
}
  /**
     +----------------------------------------------------------
     * 执行查询 返回数据集
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param string $sql  sql指令
     */
    public function query($sql) {
        if ( !$this->conn ) return false;
        $this->querystr = $sql;
        //释放前次的查询结果
        if ( $this->queryid ) {    $this->free();    }
$this->query_start_time = microtime(true);
$this->queryid = mysql_query($sql, $this->conn);
        $this->query_count++;
        if ( false === $this->queryid ) {
            $this->error();
            return false;
        } else {
            $this->numrows = mysql_num_rows($this->queryid);
            return $this->getall();
        }
    }
 /**
     +----------------------------------------------------------
     * 执行语句
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     * @param string $sql  sql指令
     +----------------------------------------------------------
     */
    public function execute($sql) {
        if ( !$this->conn ) return false;
        $this->querystr = $sql;
        //释放前次的查询结果
        if ( $this->queryid ) {    $this->free();    }
$this->query_start_time = microtime(true);
$result =   mysql_query($sql, $this->conn) ;
        $this->query_count++;
        if ( false === $result) {
            $this->error();
            return false;
        } else {
            $this->numrows = mysql_affected_rows($this->conn);
            return $this->numrows;
        }
    }
 /**
     +----------------------------------------------------------
     * 获得所有的查询数据
     +----------------------------------------------------------
     * @access private
     +----------------------------------------------------------
     * @return array
     */
    private function getall() {
        //返回数据集
        $result = array();
        if($this->numrows >0) {
            while($row = mysql_fetch_assoc($this->queryid)){
                $result[]   =   $row;
            }
            mysql_data_seek($this->queryid,0);
        }
        return $result;
    }
 /**
     +----------------------------------------------------------
     * 取得数据表的字段信息
     +----------------------------------------------------------
     * @access public
     +----------------------------------------------------------
     */
    public function getfields($tablename) {
        $result =   $this->query('show columns from `'
其它类似信息

推荐信息