Php 从类中的函数获取返回值

Php 从类中的函数获取返回值,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试为一个名为KobbyCloud的项目创建一个类,它将帮助我更容易地选择用户数据。所以我所做的是在类中创建一个函数,在这个示例中,它基本上使用PDO进行连接: class KobbyCloud { function connect($username, $password) { return new PDO("mysql: host=localhost; dbname=kobbycloud; charset=utf8", $username, $password); }

我正在尝试为一个名为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属性。像
准备
。。。如果我要做
$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);
  } 
}
你可以看到我把
放在哪里?????
就是我遇到麻烦的地方。。。因此,我认为解决方案是从函数connect(…)
中获取返回值,但我不知道该怎么做



我对PHP类还比较陌生,所以感谢您给我提供的关于PHP类的任何提示或说明

在类中存储连接

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);
    } 
}

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

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

  • 不要返回PDO对象,而是让类从PDO继承,然后就可以用新类替换应用程序中与PDO相关的任何内容。这还允许您添加可能需要的任何附加函数,然后在这些函数中,您可以通过
    $This
    访问PDO对象

    public class KobbyCloud extends PDO { ... }
    
  • 将类用作实用工具。在这种情况下,它将是完全无状态的,您必须为PDO对象提供您执行的每个方法调用

    function user_data(PDO $pdo, $sel) { ... }
    

  • 还有其他方法(如Mark所示),但这些都是最直接的方法。总的来说,您似乎有点错过了OOP背后的想法,因此深入探讨这个主题可能是值得的。您选择的方法并不完全符合OOP的整体概念,这就是为什么您很难让它工作。

    哇,看起来很简单。您所要做的就是将其保存为变量,然后返回变量。然后你也可以在其他地方使用它。非常感谢!仅此而已:将数据库连接作为对象状态的一部分通常是不好的做法,因为它会产生相当紧密的耦合。:)如果你想冒险进行单元测试,这会让你头疼。然后,在该类中为user_data()指定一个专用方法也是紧密耦合的