从类中的函数获取返回值

时间:2014-07-02 22:36:24

标签: php mysql pdo

我正在尝试为一个名为KobbyCloud的项目创建一个类,它将帮助我更轻松地选择用户数据。所以我所做的就是在类中创建一个函数,它在这个示例中基本上使用PDO来连接:

class KobbyCloud {
  function connect($username, $password) {
    return new PDO("mysql: host=localhost; dbname=kobbycloud; charset=utf8", $username, $password);
  }
}

基本上,你要做的就是连接:

$kobbycloud = new KobbyCloud();
$kccn = $kobbycloud->("mysql-user", "mysql-pass");

这绝对没问题,事实上我甚至可以使用普通的PDO属性。就像prepare ...如果我要做$get_user = $kccn->prepare("...SQL...");它会工作正常!


但是当我尝试在类中创建一个函数来获取用户数据时,问题仍然存在。在做SQL时我不知道选择器应该使用什么。

class KobbyCloud {
  function connect($username, $password) {
    return new PDO("mysql: host=localhost; dbname=kobbycloud; charset=utf8", $username, $password);
  }

  function user_data($sel) {
    $get_user = ?????->prepare("SELECT * FROM `users` WHERE `uid`=1");
    $get_user->execute();
    return $get_user->fetch(PDO::FETCH_ASSOC);
  } 
}

你可以看到我把?????放在哪里我遇到了麻烦......所以我认为解决办法是从function connect(...)获得返回值,但我不知道如何去做。


我是PHP类的新手,所以感谢我提供的任何提示或说明。

2 个答案:

答案 0 :(得分:1)

将连接存储在班级

class KobbyCloud {

    private $connection;

    function connect($username, $password) {
        if ($this->connection === null) {
            $this->connection = new PDO("mysql: host=localhost; dbname=kobbycloud; charset=utf8", $username, $password);
        }
        return $this->connection;
    }

    function user_data($sel) {
        $get_user = $this->connection->prepare("SELECT * FROM `users` WHERE `uid`=1");
        $get_user->execute();
        return $get_user->fetch(PDO::FETCH_ASSOC);
    } 
}

答案 1 :(得分:0)

问题是你几乎只是建造了一个工厂类。它可以帮助您创建PDO对象,但它不是数据库连接的模型。

有两种方法可以实现您的目标:

  1. 而不是返回PDO对象使您的类继承自PDO,然后您可以用您的新类替换应用程序中的任何PDO相关内容。这也允许您添加您可能需要的任何其他功能,然后通过$this添加您可以访问PDO对象的那些功能。

    public class KobbyCloud extends PDO { ... }
    
  2. 将您的班级用作实用程序。在这种情况下,它将完全无状态,并且您必须为PDO对象提供您执行的每个方法调用。

    function user_data(PDO $pdo, $sel) { ... }
    
  3. 还有其他方法(如Mark所示),但这些方法是最直接的方法。总的来说,你似乎错过了OOP背后的想法,所以深入探讨这个话题可能是值得的。你选择的方法并不完全符合OOP的整体概念,这就是为什么你很难让它工作的原因。