【问题标题】:Is it possible to call this stmt fetch sentence?是否可以调用这个 stmt fetch 语句?
【发布时间】:2017-03-21 11:34:15
【问题描述】:

我是 PHP OOP 的新手,我在这里有一个问题。是否可以像这样调用 fetch 语句? $this->stmt->fetch()?

我要做的是在我的类中定义 $stmt 变量并在不同的方法中使用它,即:

class Display {
 private $connection;
private $stmt;

public function __construct ($connection) {
    $this->connection = $connection;
}

public function selectUsersValues() {
    $query = "SELECT name, surname, employment_date FROM employee";
    $this->stmt = $this->connection->dbh->prepare($query);
    $this->stmt->execute();
}
public function displayUsersValues() {

        while ($employee = $this->stmt->fetch()){
         echo "<tr>";
         echo "<td>".$employee['name']."</td>";
         echo "<td>".$employee['surname']."</td>";
         echo "<td>".$employee['employment_date']."</td>";
    }
}
}

基本上,在一种方法中,我只想选择值,而在另一种方法中获取所有结果。这是好事还是我必须在selectUserValues 方法中这样做?

【问题讨论】:

  • 你试过了吗?
  • 我有,但它说 undefined stmt variable
  • 另外,您的代码缺少 echo "";

标签: php mysql oop


【解决方案1】:

我是 PHP OOP 的新手,我有一个问题。是否可以打电话 取这样的句子? $this->stmt->fetch()?

是的,有可能。

这是好事还是我必须在 selectUserValues 中做 方法?

不,这不是一件好事,因为您的客户端代码可以单独使用displayUsersValues 方法。该方法与 selectUsersValues 方法有时间耦合,这在您的代码中并不明确。 因此,您应该 force 代码的用户(甚至可能是您,几周后)同时使用它们。你可以做这个重构:

class Display {
    private $connection;
    private $stmt;

    public function __construct ($connection) {
        $this->connection = $connection;
    }

    public function selectAndDisplayUsersValues() {
        $query = "SELECT name, surname, employment_date FROM employee";
        $this->stmt = $this->connection->dbh->prepare($query);
        $this->stmt->execute();
        $this->displayUsersValues();
    }

    private function displayUsersValues() {

            while ($employee = $this->stmt->fetch()){
             echo "<tr>";
             echo "<td>".$employee['name']."</td>";
             echo "<td>".$employee['surname']."</td>";
             echo "<td>".$employee['employment_date']."</td>";
             echo "</tr>";
        }
    }
}

注意:您的代码缺少echo "&lt;/tr&gt;";

【讨论】:

  • 伙计,非常感谢您抽出宝贵的时间。但是你能再解释一件事吗?那是什么temporal coupling?你救了我的命
  • Temporal coupling 表示一段代码依赖于在它之前运行的另一段代码。
  • 另外,命名非常重要,因此您需要尽可能多地从方法的签名中说明。读者必须通过查看它的签名来找出方法的作用。他/她不能理解如何它是做什么的,而是什么它做什么。
  • 我会尝试改进我的其他方法名称,感谢您的建议!
猜你喜欢
  • 2022-01-08
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 2022-10-13
相关资源
最近更新 更多