初学者,一直不太明白怎么设计类.
我现在设计了两个类.大概简略的说明下.
class data{
   function __construct(){//创建mysql连接
      $this->con = mysql_connect()
   }
   function __destruct(){//关闭mysql连接.
      $this->con = mysql_close()
   }
   function query(){}//用于sql的查询,有返回值.
   function execute(){}//用于执行sql,如增删改,无返回值.
}class select(){//一个专门用于固定查询特定数据的类.
   function table($id){//查询某个表的数据.
      $data = new data();
      $sql = "select * from table where id = $id";
      return $data->query($sql);
      unset($data);
   }
}不知道我这样设计类是否正确.?我碰到的问题是.
在某个页面需要用到写入数据,及查询某些固定数据.
如下实例化了这两个对象.
$select = new select;
$data = new database;
//然后我运行$select->table($id)时.
会有警告,明白意思是$select->table时,因为本身$data的数据库连接开着.所以会提示错误.请问是如何解决?到底该如何设计?

解决方案 »

  1.   

    class select(){//一个专门用于固定查询特定数据的类.
      function table($id){//查询某个表的数据.
      $data = new data();
      $sql = "select * from table where id = $id";
      return $data->query($sql);
      unset($data);这个应该写在你的class data{类里,如果需要改动只需要继承之后进行功能的扩展.
    其实嘛你可以参考一下别人写好的mysql 类就清楚了.将一些常用的Mysql封装起来,
    不过怪署黍不建议这么做.嘿嘿
      

  2.   

    单例模式,通过静态方法只返回同一个对象class data{
      static $dbObject; // 增加的一个静态变量,用以储存对象。
      function __construct(){//创建mysql连接
      $this->con = mysql_connect()
      }
    static function getObject()  // 通过此静态方法获取 data类也就是本身的 对象。
    {
       if( !( $dbObject instanceof data) ) // 检测 $dbObject是否是data类的对象 ,如果不是
             data::$dbObject = new data;
       
       return data::$dbObject;               
    }
    // 你的其它方法
    }这样你可以将 data::getObject() 调用N多次,但始终只实例化一个对象,连接数据库的操作也就只执行一次。
    有关 instanceof 操作符 http://php.net/manual/zh/language.operators.type.php
      

  3.   

    楼主在闭门造车,想当然的说
    绝无可能出现 会有警告,明白意思是$select->table时,因为本身$data的数据库连接开着
      

  4.   

    哈哈,LZ 每次SELECT 都去NEW 一个CONNECT 明显不合理啊
    应该是一个页面,一次链接
      

  5.   


    <?php// 数据模型操作
    class Model{  public $db;  function connect(){//创建mysql连接
    $this->db = mysql_connect()
      } 
      function query(){}//用于sql的查询,有返回值.
      function execute(){}//用于执行sql,如增删改,无返回值.
      function insert(){}
      function update(){}
      ....
    }
    // 用户模型设计
    class user_model extends Model{ 
     
      function __construct(){//创建mysql连接
     $this -> connect();
      }  function query_user($id){ 
      $sql = "select * from user where id = $id";
      return $this -> db ->query($sql);
      }
     
      function insert_user($data){
     return $this -> db ->insert($data);
      }
    }class new_model extends Model{ 
    ....
    }
    ...$model = new model();
    $model -> query_user($id);
    $model -> insert_user($data);?>
    可以啊。稍微改下,这么做。
      

  6.   


    这样的数据库抽象层次还是不够,只使用mysql扩展。
    可以继承pdo.
    但是pdo也不是支持所有的数据库。
    so.no perfect solution yet.
      

  7.   

    其实是我太不理解如何面对对象...开始学的程序是面向过程的...现在一直都是这种习惯思维.
    所以在设计类上不知从和下手...按我的理解的对象含义.
    我就设计了上面那两个类...
    一个是无限制的操作数据库.
    一个是固定好某种模式只用把参数带进去.一个搞.net的朋友告诉我说大致是分为3个类
    一个get类专门接收get,post的.一个数据库类,一个传递类,负责把get类传给数据库类.
    宏观上我明白这个道理,但在细节上我不知道该具体如何操作.我最上面那碰到的解决了,我把构造析构函数改为了普通的方法.
    虽然解决了问题,但我明白我在类的设计上是有缺陷的.希望大家给我指点下...我永远面对不了对象.
      

  8.   


    是啊。建立connection是需要时间的。