Php 从类中的函数获取返回值
我正在尝试为一个名为KobbyCloud的项目创建一个类,它将帮助我更容易地选择用户数据。所以我所做的是在类中创建一个函数,在这个示例中,它基本上使用PDO进行连接: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); }
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对象,但它不是数据库连接的模型 有两种方法可以实现您的目标:
$This
访问PDO对象
public class KobbyCloud extends PDO { ... }
function user_data(PDO $pdo, $sel) { ... }
还有其他方法(如Mark所示),但这些都是最直接的方法。总的来说,您似乎有点错过了OOP背后的想法,因此深入探讨这个主题可能是值得的。您选择的方法并不完全符合OOP的整体概念,这就是为什么您很难让它工作。哇,看起来很简单。您所要做的就是将其保存为变量,然后返回变量。然后你也可以在其他地方使用它。非常感谢!仅此而已:将数据库连接作为对象状态的一部分通常是不好的做法,因为它会产生相当紧密的耦合。:)如果你想冒险进行单元测试,这会让你头疼。然后,在该类中为user_data()指定一个专用方法也是紧密耦合的