怎么样把两个类,整成一个类

时间:2022-11-11 20:06:04
我现在是,把对数据库的每个表的操作都整成了一个类,可是每个类中都有连接数据库的语句,修改不方便,
请问怎么样,才能写一次链接数据库的语句,
大家都是怎么样操作的啊?
请大家多多指导!!

aa表对应的类aa.php

class aa{
var $conn;

public $adds_id;
public $adds_title;
public $adds_content;
public $adds_time;       

function __construct() {
// 连接数据库
$this->conn = mysqli_connect("localhost", "root", "", "shujukuming");  //连接数据库
mysqli_query($this->conn, "SET NAMES gbk");
}

function __destruct() {
// 关闭连接
mysqli_close($this->conn);
}

// 插入新记录
function insert(){
$sql = "insert into aa values('', '" . $this->adds_title . "', '" . $this->adds_content . "',".  $this->adds_time  .")";
$this->conn->query($sql);
}
        }


bb表对应的类bb.php

class bb{
var $conn;

public $y_id;
public $UserName; // 用户名,保存当前的用户名
public $UserPwd; // 用户密码


function __construct() {
// 连接数据库  ,声明类对象时,执行此构造函数 
$this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连接数据库
mysqli_query($this->conn, "SET NAMES gbk");
}

function __destruct() {
// 关闭连接
mysqli_close($this->conn);
}

// 判断指定用户是否存在
function exists($user){    //参数$user 表示指定的 用户名
$result = $this->conn->query("select username,pwd from bb where username='" . $user . "'");
if($row = $result->fetch_array()) {
$this->UserName = $user;
$this->UserPwd = $row['pwd'];
return true;
}
else
return false;
}
         }

13 个解决方案

#1


可以设置一个全局变量, 存放连接的ID

#2


还可以用继承, 但你要优化一下,

#3


<?php
class base 
{
  var $conn;

  function __construct() {
            // 连接数据库  ,声明类对象时,执行此构造函数 
            $this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连接数据库
            mysqli_query($this->conn, "SET NAMES gbk");
        }
        
        function __destruct() {
            // 关闭连接
            mysqli_close($this->conn);
        }

}



class aa extends base {}

class bb extends base {}
?>

#4


学习学习~~~~~~~~~~~····

#5


可以看一下Zend_Db,

或者简单地用sington模式,网上大把的例子

#6


写错了,singleton

class Db 
{
 
    protected static $_instance;
    private $conn;
 
    private function __construct(){ 
        $this->conn = mysqli_connect("localhost", "root", "", "shujukuming");
        mysqli_query($this->conn, "SET NAMES gbk");
    }
 
    private function __clone(){ }
 
    public static function getInstance() 
    {
      if( self::$_instance === NULL ) {
        self::$_instance = new self();
      }
      return self::$_instance;
    }

    public function query($sql){
       //....
    }
}
 

在任何需要的地方直接用就行了:
Db::getInstance()->query($sql);


当然,这样只是一个数据库连接,(大部分应用已经没问题了)

如果你需要两个,可以建2个这样的class,
或者建一个带2个instance的singleton,

或者更好地,用Registry模式, (registry模式可以很好地代替全局变量 global),

如果你要很多连接,而且会连接到不同数据库...etc, 那就看zend_Db,它综合了几种模式.


#7


继承同一个基类

可以把链接字符串放在基类的static成员变量中

#8


补充3楼的
<?php
class base 
{
  var $conn;

  function __construct() {
            // 连接数据库  ,声明类对象时,执行此构造函数 
            $this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连……
[/Quote]

class aa extends  base{

function __construct()
{
parent::__construct();


}
}
function aa($uid)
{
$this->db->query();
}}

#9


顺便说一下, 用继承的话,一个缺点是该类就不能再继承别的类的

#10


引用 6 楼 helloyou0 的回复:
写错了,singleton

class Db
{

protected static $_instance;
private $conn;

private function __construct(){
$this->conn = mysqli_connect("localhost", "root", "", "shujukuming");
mysqli_query($th……


恩,不错,把数据库链接单个弄成个类,用单态模式获取实例,既节省资源,提高效率,还方便快捷

#11


include_once()方法能实现吗?

#12


继承pdo类,用它来处理还是不错的!

#13


可以用继承,把两个类里面都存在的对数据库的连接的操作,都放在父类里。子类全都是一些对各表的查询操作。

不过从MVC角度讲,数据库的连接的操作其实应该算是model层,而你对各表的连接应该属于control层。应该分开才合理。

你可以把对数据库的连接的操作,都放在a类里,new出来的对象作为参数传到b类里面使用。

#1


可以设置一个全局变量, 存放连接的ID

#2


还可以用继承, 但你要优化一下,

#3


<?php
class base 
{
  var $conn;

  function __construct() {
            // 连接数据库  ,声明类对象时,执行此构造函数 
            $this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连接数据库
            mysqli_query($this->conn, "SET NAMES gbk");
        }
        
        function __destruct() {
            // 关闭连接
            mysqli_close($this->conn);
        }

}



class aa extends base {}

class bb extends base {}
?>

#4


学习学习~~~~~~~~~~~····

#5


可以看一下Zend_Db,

或者简单地用sington模式,网上大把的例子

#6


写错了,singleton

class Db 
{
 
    protected static $_instance;
    private $conn;
 
    private function __construct(){ 
        $this->conn = mysqli_connect("localhost", "root", "", "shujukuming");
        mysqli_query($this->conn, "SET NAMES gbk");
    }
 
    private function __clone(){ }
 
    public static function getInstance() 
    {
      if( self::$_instance === NULL ) {
        self::$_instance = new self();
      }
      return self::$_instance;
    }

    public function query($sql){
       //....
    }
}
 

在任何需要的地方直接用就行了:
Db::getInstance()->query($sql);


当然,这样只是一个数据库连接,(大部分应用已经没问题了)

如果你需要两个,可以建2个这样的class,
或者建一个带2个instance的singleton,

或者更好地,用Registry模式, (registry模式可以很好地代替全局变量 global),

如果你要很多连接,而且会连接到不同数据库...etc, 那就看zend_Db,它综合了几种模式.


#7


继承同一个基类

可以把链接字符串放在基类的static成员变量中

#8


补充3楼的
<?php
class base 
{
  var $conn;

  function __construct() {
            // 连接数据库  ,声明类对象时,执行此构造函数 
            $this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连……
[/Quote]

class aa extends  base{

function __construct()
{
parent::__construct();


}
}
function aa($uid)
{
$this->db->query();
}}

#9


顺便说一下, 用继承的话,一个缺点是该类就不能再继承别的类的

#10


引用 6 楼 helloyou0 的回复:
写错了,singleton

class Db
{

protected static $_instance;
private $conn;

private function __construct(){
$this->conn = mysqli_connect("localhost", "root", "", "shujukuming");
mysqli_query($th……


恩,不错,把数据库链接单个弄成个类,用单态模式获取实例,既节省资源,提高效率,还方便快捷

#11


include_once()方法能实现吗?

#12


继承pdo类,用它来处理还是不错的!

#13


可以用继承,把两个类里面都存在的对数据库的连接的操作,都放在父类里。子类全都是一些对各表的查询操作。

不过从MVC角度讲,数据库的连接的操作其实应该算是model层,而你对各表的连接应该属于control层。应该分开才合理。

你可以把对数据库的连接的操作,都放在a类里,new出来的对象作为参数传到b类里面使用。