Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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/MySQL,在这种特殊情况下不理解foreach循环。[概念问题]_Php_Mysql_Object Oriented Analysis - Fatal编程技术网

PHP/MySQL,在这种特殊情况下不理解foreach循环。[概念问题]

PHP/MySQL,在这种特殊情况下不理解foreach循环。[概念问题],php,mysql,object-oriented-analysis,Php,Mysql,Object Oriented Analysis,在我提问之前,我将发布代码:(请注意,如果你能解释第二个问题,这就足够了,我真的很困惑foreach循环中发生了什么 <?php class dbh { private $servername; private $username; private $password; private $ dbname; protected function connect() { $this->servername = "localhost"; $this

在我提问之前,我将发布代码:(请注意,如果你能解释第二个问题,这就足够了,我真的很困惑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>

关于这段代码,我有几点不明白

  • 首先,这些类中的“this”是什么?它只是users对象的占位符,它是当前对象,对吗?我想是的

  • 其次,也是我的主要问题,当我们调用成员函数showAllUsers()时,我们转到ViewUser类,然后我们有一个$datas变量,分配给$this->getAllUsers(),它最终返回一个$data数组,其中包含数据库中的所有行……对吗

  • 然后我的问题是,foreach循环中$datas的内容是什么?它是一个行数组吗?$data应该是键值,但是$data也是一个数组,这让我非常困惑

    我将其可视化为$datas=$data,所以 $data[]=[$data[0],$data[1],$data[2],$data[3],…$data[最后一个]] 每个元素都包含一行。。。 所以foreach($datas as data)遍历每个元素,但要显示它,我们需要回显数据[0]?
    我的理解正确吗?我知道这是一个关联数组,所以0、1、2…等是表的列标题

  • 另外,当我们有$row=fetch\U assoc时,$fetch\U assoc到底做了什么?我们只是将行存储在$rows变量中吗?当我们到达最后一行时,while循环是错误的,对吗?我只是习惯于在while循环中看到条件,例如while(x==4).我从未见过分配变量的情况,例如while(x=4),直到现在

  • 对于一个类处理方案来说,这实际上是非常糟糕的,但您的问题仍然有效

  • 你说得有点对。
    $this
    是对类的当前实例(read:object)的引用,在该类中定义了一个使用
    this
    关键字的方法
  • 在所有情况下都是正确的。
    datas
    是一个数组数组(表示数据库表中的行)。
    $datas
    的每个元素都包含另一个数组,该数组表示一行,其中每个元素都是该行的一列。它们是关联数组,因此索引是键,如您所说
  • 根据,
    mysqli::query
    返回类型为
    mysqli_result
    的对象,因此您不能直接作为数组访问它。
    mysqli::fetch_assoc
    将通过移动指针将
    mysqli_result
    转换为一个关联数组,这就是为什么您在
    循环期间一直循环,直到
    fetch_assoc
    返回false(即,当结果对象中没有更多行时,或当指针到达最后一行时)

  • 上面的代码是面向对象编程(OOP),它是面向对象的编程。它不同于过程式编程。在过程式编程中,你可以以线性方式构建代码,而OO则基于对象构建代码。我在手机上,所以我现在无法键入其余的内容-但一旦我到了我的电脑上,我会回答,除非其他人有。同样,在类中,你是c所有变量都被称为属性,你用来调用函数的都被称为类内部的方法。我看到其他人已经回答了。我将告诉你——当你深入OOP时,忘掉MySQLi,学习使用PDO。你必须学习更多的OOP(面向对象编程)在提出这些问题之前,我认为stackoverflow“不是一个了解OPP的地方”但是要提出与基本OOP学习过程无关的具体问题。我不得不问,网上的任何地方都没有足够好的解释,我猜这些问题是专家们认为我会弄明白的,但我只需要一些确认,这样我就可以继续了。我会说试试PHP聊天室,但我们会说,如果你们也会在那个里提问,但若你们在聊天中提问,至少你们不会有被限制提问一段时间的风险。只要在聊天中把你们的问题具体化,不要太宽泛。