初学者,一直不太明白怎么设计类.
我现在设计了两个类.大概简略的说明下.
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的数据库连接开着.所以会提示错误.请问是如何解决?到底该如何设计?
我现在设计了两个类.大概简略的说明下.
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的数据库连接开着.所以会提示错误.请问是如何解决?到底该如何设计?
function table($id){//查询某个表的数据.
$data = new data();
$sql = "select * from table where id = $id";
return $data->query($sql);
unset($data);这个应该写在你的class data{类里,如果需要改动只需要继承之后进行功能的扩展.
其实嘛你可以参考一下别人写好的mysql 类就清楚了.将一些常用的Mysql封装起来,
不过怪署黍不建议这么做.嘿嘿
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
绝无可能出现 会有警告,明白意思是$select->table时,因为本身$data的数据库连接开着
应该是一个页面,一次链接
<?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);?>
可以啊。稍微改下,这么做。
这样的数据库抽象层次还是不够,只使用mysql扩展。
可以继承pdo.
但是pdo也不是支持所有的数据库。
so.no perfect solution yet.
所以在设计类上不知从和下手...按我的理解的对象含义.
我就设计了上面那两个类...
一个是无限制的操作数据库.
一个是固定好某种模式只用把参数带进去.一个搞.net的朋友告诉我说大致是分为3个类
一个get类专门接收get,post的.一个数据库类,一个传递类,负责把get类传给数据库类.
宏观上我明白这个道理,但在细节上我不知道该具体如何操作.我最上面那碰到的解决了,我把构造析构函数改为了普通的方法.
虽然解决了问题,但我明白我在类的设计上是有缺陷的.希望大家给我指点下...我永远面对不了对象.
是啊。建立connection是需要时间的。