php/mysql,在这种特殊情况下不理解foreach循环[概念性问题

kd3sttzy  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(415)

在我问问题之前,我将发布代码:(请注意,如果你能解释第二个问题就足够了,我只是真的很困惑foreach循环发生了什么。

<?php
class dbh {
    private $servername; private $username; private $password; private $ 
    dbname;
    protected function connect() {
    $this->servername = "localhost";
    $this->username = "root";
    $this->password = "";
    $this->dbname = "whatever";

    $conn = new mysqli($this->servername, $this->username, $this->password, 
$this->dbname);
    return $conn;
    }
}

<?php
class User extends Dbh {
    protected function getAllUsers() {
        $sql = "SELECT * FROM user";
        $result = $this->connect()->query($sql);
        $numRows = $result->num_rows;
        if($numRows > 0) {
           while($row = $result ->fetch_assoc()) {
               $data[] = $row;
           }
           return $data;
        }
    }
}

<?php
class ViewUser extends User {
   public function showAllUsers() {
      $datas = $this->getAllUsers();
      foreach ($datas as $data) {
         echo $data['uid'] . "<br>";
         echo $data['pwd'] . "<br>";
      }
   }
}

<?php
    includes all those classes
?>

<body>
<?php
    $users = new ViewUser();
    $users->showAllUsers();
?>
</body>

我对这段代码有几点不懂。
首先,这些课程中的“这”是什么?它只是用户对象的占位符,即当前对象,对吗?我想是的。
其次,也是我的主要问题,当我们调用成员函数showallusers()时,我们转到viewuser类,然后我们有一个$datas变量被分配给$this->getallusers(),它最终返回一个$data数组,其中包含数据库中的所有行。。。正确的?
那么我的问题是,foreach循环中$datas的内容是什么?它是一个行数组吗$data应该是键值,但是$data也是一个数组,这让我非常困惑。
我将其可视化为$datas=$data,所以$datas[]=[$data[0],$data[1],$data[2],$data[3]$数据[最后一个]]并且这些元素中的每一个都包含一行。。。所以foreach($datas as data)遍历每个元素,但要显示它,我们需要回显数据[0]?
我的理解正确吗?我知道这是一个关联数组,所以那些0,1,2。。。etc是表的列标题。。
另外,当我们有$row=fetch\u assoc时,$fetch\u assoc到底做了什么?我们只是在$rows变量中存储行吗?当我们到达最后一行时while循环是假的,对吗?我只是习惯于在while循环中看到一个条件,比如while(x==4)。我从来没有见过我们分配变量的情况,比如while(x=4),直到现在。

relj7zay

relj7zay1#

对于类处理方案来说,这实际上是相当糟糕的,但是您的问题仍然有效。
你说得有点对。 $this 是对类的当前示例(read:object)的引用,在该类中定义使用 this 关键字。
在任何情况下都是正确的。你说得对 datas 是一个数组数组(表示数据库表中的行)。每个元素 $datas 包含另一个表示单行的数组,其中每个元素都是该行的一列。它们是关联数组,所以索引是一个键,就像你说的。
根据文件, mysqli::query 返回类型为的对象 mysqli_result ,因此不能直接作为数组访问它。 mysqli::fetch_assoc 将转换 mysqli_result 一行一行地移动指针,这就是为什么在 while 循环直到 fetch_assoc 返回false(即,当结果对象中没有更多行时,或当指针到达最后一行时)。

相关问题