很多时候,我们在后台需要频繁的操作数据库,这种情况下就需要连接数据库。我用的是php+mysql数据库来进行开发的。所以下面的栗子也就只是针对php+mysql的情况而定,其他的连接方式我就不讨论了,个人能力有限哈~~
我在刚开学习php连接mysql数据库时,都是自己声明一个$con对象,然后通过该对象来创建和数据库的连接,最好关闭连接的时候回收该对象,这样做其实没有什么错,但这样做会无缘无故的产生许多声明的$con对象与关闭$con对象的代码,对于一个合格的、优秀的程序员来说,代码的精简才会让人看的赏心悦目,是吧
前天我在公交上看有关php的构造函数与析构函数,构造函数就是在创建对象的时候,会自动调用的函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法;而析构函数则是在销毁一个类之前执行的一些操作或完成的一些功能,这两个函数有点像一个汉堡包的上下层,咱们的对象就在中间的那一块。
讲解玩构造函数和析构函数,接下来就进入我们的正题把。其实我们完全可以利用php的构造函数与析构函数给数据库类各个查询方法的注入$con对象,同时自动在每次查询之后自动回收$con对象。这确实是一个以逸待劳的好方法,希望能给大家一点启示。
下面咱们就来举个栗子来说明下这个方法是怎么用的把
首先,我们编写一个model.php如下,先声明一个私有的类成员$con作为这个类的全局变量。可以把建立数据库连接的代码放在testtable这个数据库查询类的构造函数__construct()里面,把关闭数据库连接的代码放在析构函数__destruct()里面,其中__construct()与__destruct()是php中的函数名保留关键字,也就是一旦声明这两个函数,就被认为是构造函数与析构函数。
值得注意的是,为声明的私有类成员$con赋值,必须用$this->con的形式。不可以直接$con=xx,如果是$con=xx,php认为这个变量的作用范围仅在当前函数内,不能作用于整个类。这个跟变量的权限有关系,不太清楚这块的同学可以去查看下变量的访问权限这块的内容。
构造函数,要求一个变量$databaseName,此乃调用者需要查询的数据库名。
class testtable{
private $con; //该变量是私有变量,打个不太恰当的比方,就是你女朋友只能是你的女朋友,不可能是别人的女朋友是吧,不然就坏了
function __construct($databaseName){
$this->con=mysql_connect("localhost","root","root"); //连接数据库信息
if(!$this->con){
die("连接失败!");
}
mysql_select_db($databaseName,$this->con);
mysql_query("set names utf8;");
}
public function getAll(){
$result=mysql_query("select * from testtable order by date desc;");
$testtableList=array();
for($i=0;$row=mysql_fetch_array($result);$i++){
$testtableList[$i]['id']=$row['id'];
$testtableList[$i]['username']=$row['username'];
$testtableList[$i]['number']=$row['number'];
$testtableList[$i]['date']=$row['date'];
}
return $testtableList;
}
function __destruct(){
mysql_close($this->con); //关闭数据库连接
}
}
?>
做完之后,getAll()这个数据库查询类的查询方法,无须声明数据库连接与关闭数据库连接,直接就可以进行查询,查询完有析构函数进行回收。在controller.php中先引入这个testtable查询类,再进行getAll()方法的调用,则得到如上图的效果:
header("Content-type: text/html; charset=utf-8");
include_once("model.php"); //引入testtable查询类
$testtable=new testtable("test");
$testtableList=$testtable->getAll();
echo "
for($i=0;$i
echo
"
".$testtableList[$i]['id']."".$testtableList[$i]['username']."".$testtableList[$i]['number']."".$testtableList[$i]['date']."";}
echo "
";?>
到这里,咱们的工作就完成了,是不是没有想象中的那么复杂哈,其实这个方法完全可以放在公共模块中,只要哪里需要用到数据库查询操作的,都可以直接调用该方法,其实这个类写的还不太全面,它只能做查询操作,有兴趣的小伙伴可以对上面的类进行下变更,让他能同时进行CURD的各种操作。
以上就是本人的笔记,希望能对有的小伙伴起到帮助,同时希望大家能积极做出评论,我会很认真的为大家解答的!