gpt4 book ai didi

php - 从数据库中获取数据是一种获取方法吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:11:24 26 4
gpt4 key购买 nike

我有一个小类,我称之为 Viewer。这个类应该查看每个页面的正确布局或类似的东西......

我有一个名为 getFirstPage 的方法,调用此方法的用户将获得当前设置为首页的页面的设置值。我这里有一些代码,我认为它可以工作,但我不确定我是否以正确的方式完成了它:

class Viewer {

private $db;
private $user;
private $firstPage;

function __construct($db, $user) {

$this->db = $db;

if(isset($user)) {
$this->user = $user;
} else {
$this->user = 'default';
}
}

function getFistPage() {
$std = $db->prepare("SELECT firstPage FROM settings WHERE user = ':user'");
$std->execute(array(':user' => $user));
$result = $std->fetch();
$this->firstPage = $result['firstPage'];

return $this->firstPage;
}
}

我的 get 方法正在从数据库中获取设置(到目前为止还好吗?)。问题是我必须使用这个 get 方法来设置私有(private)变量 firstPage。似乎我应该有一个 set 方法来执行此操作,但我真的不能有一个 set 方法只从数据库中获取一些设置,对吧?因为这个对象的用户应该能够假设已经在对象中定义了一个设置...

我应该怎么做?

最佳答案

我觉得你的做法还不错。最重要的是在您执行的构造函数中传递 $db。用户可以是构造函数的参数或方法本身,这取决于用户对于应用程序的“永久性”程度。

有几件小事我会改进:

  1. 对 PDO 对象使用类型提示。因此,任何使用您的“库”的人都知道应该注入(inject)什么样的对象。
  2. 几乎从不使用private 可见性,而是使用protected。因此,如果有人想扩展你的类,他仍然可以访问你的属性。
  3. 不要使用 isset/empty 来检查 $user,而是引入默认值。因此,任何调用您的方法并看到参数的人都知道发生了什么。
  4. 始终明确使用public 可见性。这是一个很好的做法,您不会混淆例如 Java 开发人员,他们默认使用 package
  5. 如果您真的想创建高质量的代码,请检查每种可能的错误状态,以免遇到 fatal error 。 PDO::fetch 可以返回 false,您应该在以数组形式访问结果之前检查此错误状态。
  6. 如果您决定将$firstPage 保存到对象状态,您应该在下次调用该方法时重用它。但是,如果您编写一个普通的 Web 应用程序,我认为您并不真的想将其置于对象状态。相反,只返回结果。

然后,您的代码将如下所示:

class Viewer {

/** @var PDO $db */
protected $db;
protected $user;

public function __construct(PDO $db, $user = 'default') {
$this->db = $db;
$this->user = $user;
}

public function getFistPage() {
$std = $this->db->prepare("SELECT firstPage FROM settings WHERE user = ':user'");
$std->execute(array(':user' => $this->user));
$result = $std->fetch();

if ($result !== false) {
return $result['firstPage'];
} else {
throw new YourException('Failed to fetch first page.');
// or return false/null;
}
}

编辑:您应该始终在构造函数中完全设置对象状态,并且您不应该在其中进行任何计算。另外,避免使用类似初始化的方法。在这种情况下,构造函数确保我们设置了 PDO 和 $user 参数(对象状态)。然后,您可以在不传递额外参数的情况下在方法中进行计算(这很好,它支持对象封装)。

关于php - 从数据库中获取数据是一种获取方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19616710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com