各位大大好,我最近在做个PHP的网站,为了能够让系统的结构看上去更加清晰,我打算尝试引入OO的编程方式(之前都是清一色的function -_-)。但是在处理数据库连接方面,有些小问题。例如我有个“用户”的类,class user。构建器默认是接收一个用户的ID,然后从数据库中读取用户的各项资料,然后保存在私有的属性内,大概看起来是这么个东东:
class user{
private $username;
private $avatar;
private %blablabla; public function __construct($_username){
// 就是在这里开始读取数据库,然后赋值
}
}
接下来问题就来鸟,那user类怎么操作数据库呢?是把之前打开的数据库连接的变量传递给构建器么?例如:
public function __construct(&$database, $username){ /* ___ bla bla bla ___ */ }
我之前在网上看到,使用static变量来创建一个数据库的class,然后保证同时只有一个数据库连接被打开。但是因为不同的类是保存在不同的文件里面的,现在要把他们放在一起用,有点搞不明白。例如我现在这个user的类,需要用到数据库操作。那怎么把数据库连接提供给他呢?之前想过存在global里面,但是觉得还是有点不靠谱。所以来问问大家平时都是怎么操作的呢?
class user{
private $username;
private $avatar;
private %blablabla; public function __construct($_username){
// 就是在这里开始读取数据库,然后赋值
}
}
接下来问题就来鸟,那user类怎么操作数据库呢?是把之前打开的数据库连接的变量传递给构建器么?例如:
public function __construct(&$database, $username){ /* ___ bla bla bla ___ */ }
我之前在网上看到,使用static变量来创建一个数据库的class,然后保证同时只有一个数据库连接被打开。但是因为不同的类是保存在不同的文件里面的,现在要把他们放在一起用,有点搞不明白。例如我现在这个user的类,需要用到数据库操作。那怎么把数据库连接提供给他呢?之前想过存在global里面,但是觉得还是有点不靠谱。所以来问问大家平时都是怎么操作的呢?
解决方案 »
- MVC框架里的控制器数量一般是比较多还是比较少
- SQL syntax near 'names 'utf8''
- 向高手请教用PHP的MYSQLI 方法调用MYSQL存储过程,带记录集和返回值的方法
- WEBService Client(PHP)->Server(JAVA)
- 现在php的人不少啊。连sohu.com都是?
- 郁闷啊,每次提交保存竟然永遠是同樣的時間,連<F5>刷新都沒用!
- php中全局变量传值的问题
- 有哪位大虾在win98下装过phpHomeEdition?急!
- 寻最优算法~~~~~~~~
- 急!!!!apache+php在Win98下的安装问题,请高手指教,不胜感激
- php连接wcf时报错
- 关于休假申请的实现!
恩恩恩,也就是说直接在user类里面使用数据库类咯,在require_once我的user类之前,得先把数据库类包含进来的……
private $host;
private $root;
private $psw;
function __construct($host,$root,$psw){ }
static function link(){
}}//另一个类
class user{
private $username;
private $avatar;
private %blablabla; public function __construct($_username){
$db=db::link();//这里调用
}}
如果还有其他类用到数据库,将数据库类对象放在公用的地方,然后user类的实例作为参数传递给数据库连接或者接收数据库的查询结果。
肯定还有别的类要用到数据库连接的。不过你说的这个方法很不错,数据库类直接负责创建user等等,例如:$user = $db->getUser($username);
这样至少在user类内部不需要关心数据库的问题了。
//这个例子里的application类,db 类,应该放在不同文件夹,比如application/application.class.php,includes/db/db.class.php,这样你知道db这个关键字参数,就知道到哪个目录去找哪个文件。
class user{
private $username;
private $avatar;
private $blablabla; public function __construct($_username){
// 就是在这里开始读取数据库,然后赋值
$this->db = application::getInstance('db');
echo $this->db."<br/>";
}
}class application{
public static function getInstance($instance)
{
static $instances;
if(!$instances[$instance])
{
$instances[$instance] = new $instance();
}
return $instances[$instance];
}
}
$config['host'] = 'localhost';
$config['db_user'] = 'root';
$config['db_pass'] = '';
class db
{
public function __construct()
{
global $config;
$this->conn = mysql_connect($config['host'],$config['db_user'],$config['db_pass']);
}
}
// 读取数据库,赋值
$this->db = application::getInstance('db');