PHP/MySQL,在这种特殊情况下不理解foreach循环。[概念问题]
在我提问之前,我将发布代码:(请注意,如果你能解释第二个问题,这就足够了,我真的很困惑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
<?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>
关于这段代码,我有几点不明白
我的理解正确吗?我知道这是一个关联数组,所以0、1、2…等是表的列标题
对于一个类处理方案来说,这实际上是非常糟糕的,但您的问题仍然有效
$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聊天室,但我们会说,如果你们也会在那个里提问,但若你们在聊天中提问,至少你们不会有被限制提问一段时间的风险。只要在聊天中把你们的问题具体化,不要太宽泛。