Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以调用此stmt fetch语句?_Php_Mysql_Oop - Fatal编程技术网

Php 是否可以调用此stmt fetch语句?

Php 是否可以调用此stmt fetch语句?,php,mysql,oop,Php,Mysql,Oop,我是PHP OOP新手,这里有一个问题。可以这样调用fetch语句吗? $this->stmt->fetch() 我想做的是在我的类中定义$stmt变量,并在不同的方法中使用它,即: class Display { private $connection; private $stmt; public function __construct ($connection) { $this->connection = $connection; } public function s

我是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>";
    }
}
}
类显示{
私人连接;
私人$stmt;
公共功能构造($connection){
$this->connection=$connection;
}
公共函数selectUsersValues(){
$query=“从员工处选择姓名、姓氏、雇用日期”;
$this->stmt=$this->connection->dbh->prepare($query);
$this->stmt->execute();
}
公共函数displayUsersValues(){
而($employee=$this->stmt->fetch()){
回声“;
回显“$employee['name']”;
回显“$employee[‘姓氏’”;
echo“$employee['employment_date'”;
}
}
}
基本上,在一个方法中,我只想选择值,在另一个方法中获取所有结果。这是一件好事还是我必须在
selectUserValues
方法中这样做

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

是的,这是可能的

这是一件好事还是我必须在selectUserValues中这样做 方法

不,这不是一件好事,因为客户端代码可以单独使用
displayUsersValues
方法。该方法与
selectUsersValues
方法存在时间耦合,而该方法在代码中并不明确。 因此,您应该
强制
您代码的用户(甚至可能是您,几周后)同时使用这两种代码。您可以进行以下重构:

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>";
        }
    }
}
类显示{
私人连接;
私人$stmt;
公共功能构造($connection){
$this->connection=$connection;
}
公共函数selectAndDisplayUsersValues(){
$query=“从员工处选择姓名、姓氏、雇用日期”;
$this->stmt=$this->connection->dbh->prepare($query);
$this->stmt->execute();
$this->displayUsersValue();
}
私有函数displayUsersValues(){
而($employee=$this->stmt->fetch()){
回声“;
回显“$employee['name']”;
回显“$employee[‘姓氏’”;
echo“$employee['employment_date'”;
回声“;
}
}
}

注意:您的代码缺少一个
echo”“

你试过了吗?我试过了,但上面写着未定义的
stmt
variablealso,你的代码缺少一个echo“”;伙计,非常感谢你抽出时间。但你能再解释一件事吗?时间耦合是什么?你救了我的命
时间耦合
意味着一段代码依赖于在它之前运行的另一段代码。此外,命名非常重要,因此你需要尽可能多地从方法的签名中辨别出来。读者必须通过查看其签名来了解方法的功能。他/她一定不能理解它是如何做到的,但它做了什么。我会尝试改进我的其他方法名称,谢谢你的建议!