近段时间松林学习了下面向对象,也买了本书,前面看着还算能看下去,到了后面越看越困。这样不行啊,也不能光看,也要敲敲代码。正好看到设计模式,最简单的当是单例模式了,其余的暂且不研究,理解也不好理解,自己顺便敲了个例子,感觉还算不错。设计模式这个东西对于一般的程序员来说基本上用不到,但是对于架构师来说那是必须要学的东西。一个好的架构必定有一个好的设计模式。 作为程序员,我们遇到的大部分问题其实都已经被其他程序员一再的处理了。设计模式意味着智慧。一个模式一旦成为通用模式,就能丰富我们的语言,使我们可轻松的分享设计思想及这些思想所带来的成果。设计模式提取了共同问题,定义了经过测试的解决方案并描述了可能的结果。

单例模式:

全局变量是面向对象程序员遇到的引发bug的主要原因之一。这是因为全局变量将类捆绑于特定的环境。破坏了封装。如果新的应用程序无法保证一开始就定义了相同的环境变量,那么一个依赖于全局变量的类就无法从一个应用程序中提取出来并应用到新的应用程序中。

尽管这并不是我们想要的,但全局变量不受保护的本质的确是个很大的问题。一旦开始依赖全局变量,那么某个类中声明的全局变量和其他位置声明的全局变量迟早会发生冲突。我们已经看到php易受到类名冲突的影像,但全局变量的冲突更加糟糕    php并不会对全局变量冲突发出任何警告。你也许只是发现代码行为古怪。更糟糕的是,在开发环境中你也许根本发现不了任何问题。因此结果在类库中使用全局变量,用户可能在尝试你的类库与其他类库一同部署时遇到冲突。

然而,全局变量扔是一个诱惑。因为有时我们为了所有类都能访问某个对象,会不惜忍受全局访问缺陷。

我提到过,命名空间在一定程度上避免了命名冲突。你至少可以将变量的作用域定义在包中,这意味着第三方的库与你的系统产产生冲突的可能性大大降低了。即便如此,命名空间内部还是存在命名冲突。

------------------摘自 : 深入php 面向对象、模式与实践

 

好了,该说书代码了,我们在程序中查询数据的操作会非常非常的多,我们不可能每次都new一个对象,这样太耗费开销了。那么我们怎么办呢,单例模式是个不错的选择。 单例模式:只能实例化一次

下面看一下代码

db.class.php

 

<?php
//数据库类、单例模式
class db{
public $conn;
private  static $sql;
private static $instact = null;

private function __construct(){
require_once('db.config.php');
$this->conn = mysql_connect($db['host'],$db['user'],$db['psd']);
if(!mysql_select_db($db['databases'],$this->conn)){
echo "数据库连接错误";
}
mysql_query('set names utf8',$this->conn);
}

public static function getInstance(){
if(is_null(self::$instact)){
self::$instact = new  db;
}
return self::$instact;
}
/**
*数据查询
*/
public function select($table,$condition=array(),$field=array()){
$where ="";
if(!empty($condition)){
foreach($condition as $k=>$v){
$where.= $k."='".$v."' and ";
}
$where = "where ".$where." 1=1";
}
if(!empty($field)){
foreach($field as $k=>$v){
$fieldstr.= $v.",";
}
$fieldstr = rtrim($fieldstr);
}else{
$fieldstr = "*";
}
self::$sql = "select {$fieldstr} from {$table} {$where}";
$result =  mysql_query(self::$sql);
$i = 0;
while($row = mysql_fetch_assoc($result)){
foreach($row as $k=>$v){
$resultrow[$i][$k] = $v;
}
$i++;
}
var_dump($resultrow);
}

/**
*数据添加
*/
public function insert($table,$data){
$values = "";
$datas = "";
foreach ($data as $k=>$v){
$values.=$k.",";
$datas.="'$v'".",";
}
$values = rtrim($values,',');
$datas = rtrim($datas,',');
self::$sql = "insert into {$table}({$values}) values ({$datas})";
if(mysql_query(self::$sql)){
return mysql_insert_id();
}else{
return false;
};
}

/**
*数据更新
*/
public function update($table,$data,$condition=array()){
$where = "";
if(!empty($condition)){
foreach ($condition as $k=>$v){
$where.= $k."=".$v." and ";
}
$where="where ".$where."1=1";
}
$updatastr = "";
if(!empty($data)){
foreach($data as $k=>$v){
$updatastr.= $k."='".$v."',";
}
$updatastr= "set ".rtrim($updatastr,",");
}
self::$sql = "update {$table} {$updatastr} {$where}";
return mysql_query(self::$sql);
}
/**
*数据 删除
*/
public function delete($table,$condition){
$where = "";
if(!empty($condition)){
foreach( $condition as $k=>$v){
$where.=$k."='".$v."' and ";
}
$where = "where ".$where.'1=1';
}
self::$sql = "delete from {$table}  {$where}";
return mysql_query(self::$sql);
}
//打印sql
public function getlastsql(){
echo self::$sql;
}
}
$ne = db::getInstance();
//$ne->update('message',array('user'=>'wanghao','title'=>'sd'),array('id'=>'5'));
//echo $db->insert('message',array('user'=>'张三','title'=>'demo'));
$ne->select('message',array('user'=>'songlin'));
$ne->getlastsql();
?>

数据库的配置文件

db.config.php

 

<?php
$host = "localhost";  //主机地址
$user = "root";         //用户名
$psd= "";                 //密码
$databases = "ceshi";

$db = array( "host" =>$host,
"user" =>$user,
"psd" =>$psd,
"databases"=>$databases
);
?>

 

 

文章均属 松林's blog 原创 转载请注明转自松林's blog

本文地址 : http://www.songlin51.com/archives/766.html