加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP OOP:如何在其他类中使用通用MySQL类

发布时间:2020-12-13 13:08:45 所属栏目:PHP教程 来源:网络整理
导读:我刚刚开始使用OOP PHP并遇到了一个问题.我已经设置了一个通用的mysql类,它允许我连接到一个数据库,并有一些函数从表中获取记录: class mysql{ //some lines to connect,followed by: public function get_record($sql) { $result = mysql_result(mysql_que
我刚刚开始使用OOP PHP并遇到了一个问题.我已经设置了一个通用的mysql类,它允许我连接到一个数据库,并有一些函数从表中获取记录:
class mysql{
    //some lines to connect,followed by:
    public function get_record($sql)
    {
      $result = mysql_result(mysql_query($sql));
      return $result;
      //obiously it's a bit more advanced,but you get the picture.

    }
}

接下来,我有一个类来获取用户详细信息:

class user{
    __construct($id)
    {  
        $this->id = $id
    }
    public function get_username($id)
    {
         $username = get_record("SELECT name FROM users WHERE id = '".$this->id."'");
         return $username;
    }
}

我试过这个,但得到了函数get_record未知的错误.我通过添加$mysql = new mysql()来解决这个问题.到用户类.

但是,为每个使用我的数据库方法的类实例化mysql对象(这几乎就是所有这些)都感觉效率很低.

有没有办法让mysql类及其方法可供所有其他类访问,而无需在每个方法中调用mysql类?

首先,在这种情况下你不需要使用单身 – 或者实际上,你几乎从不这样做.例如,见 this article.

其次,我认为你的OO设计有点偏.面向对象编程和设计的要点是将责任分离为单独的类.现在,您将为User类分配两个主要职责 – 存储/携带一个用户的相关数据,并查询数据服务(在这种情况下,是一个简单的MySQL /数据库抽象层).

您应该首先将该功能移动到单独的对象中.通常,这称为服务 – 所以在这种情况下,它是UserService. UserService有一个职责:提供对User对象的访问.所以它看起来像这样:

class UserService {
    public function __construct($mysql); // uses the mysql object to access the db. 
    public function get($id) {
        $result = $this->mysql->get_record("select x from y");
        $user = new User($result['id'],$result['name']); // assuming user has a constructor that takes an id and a name
        return $user;
    }
    public function save($user);
    public function delete($user);
}

您可以在请求开始时(或者您需要访问用户的位置)将所有内容绑定在一起:

$mysql = new MySQL($credentials);
$service = new UserService($mysql);
$user = $service->find(1337);

它并不完美,但它的设计更加整洁.您的MySQL对象执行它需要做的事情(构建连接,执行查询),您的用户对象显然是愚蠢的,并且您的服务只做一件事,即在实际存储层和调用它的事物之间提供一个层.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读