日期:2014-05-17  浏览次数:20398 次

泪中求oop 显示策略
1.基本情况
oop写的conn连接mysql的类,系统中所有用到数据库的类来extends它。
此类部分内容见下:

class db{
public $conn;
    private static $h = "localhost";
    private static $u = "root";
    private static $p = "123123";
    public $db = "wms";//此外是变化的,换句说wms不是固定的,是变化的。user1登录时,$db="user1";user2登录时,$db="user2";

2.
因为$db是变化的,不是固定的。我一开始用$db=$_SESSION['user']但是类中不能用session.
请问如何实现呢?
3.
此法子除外。
$obj=new db($db);//通过析构函数。此法子不能用。因为其他原因,反正不能使用。
------解决方案--------------------
1.这样完成继承链接类
require_once 'db.php';
class userDao extends db{}

2.①最好不要这样设计数据库,后面拓展和维护起来很复杂,LZ需要考虑到不同的情况,最好从多个表,或者多个字段下手。
②session的值想传到类中处理,先经过PHP处理页面(我们一般叫他控制层),用访问类方法的方式传。
比如:user1登录后 处理页面标记为1 在访问数据库前 把1传入类 好让他知道调用哪个数据库 不过还是建议不要把数据库设计得太复杂
3.LZ为什么要在析构函数中实例化对象呢?一般析构函数是用来销毁对象,释放空间的。LZ要初始化对象的话,应该是在构造函数中做的。
__construct()
  
------解决方案--------------------
为什么反正不能用构造函数…………
------解决方案--------------------
不是说了么


自己写个init函数传值
$db = new mydb();
$db->init($dbname);
------解决方案--------------------
1 男子汉,大丈夫, 不要动辄眼泪~
2 对这些问题,做为学习研究,无可厚非,真到产品项目开发,没有深厚的功力之前,建议先从使用框架开始。
而框架里面,通常对 db 类会有良好的封装,你也不用去折腾太多了。
------解决方案--------------------
$obj = new db();
$obj->db = $_SESSION['user'];

既然是 public 属性,直接赋值就是了

------解决方案--------------------
自己写个init函数传值
$db = new mydb();
$db->init($dbname); 
s