【发布时间】:2018-05-31 02:13:05
【问题描述】:
在我提出问题之前,我将发布代码:(请注意,如果你能解释第二个问题就足够了,我真的很困惑 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”是什么?它只是用户对象的占位符,也就是当前对象,对吧?我认为是这样。
其次,我的主要问题是,当我们调用成员函数 showAllUsers() 时,我们转到 ViewUser 类,然后我们有一个 $datas 变量被分配给 $this->getAllUsers()最终返回一个 $data 数组,其中包含数据库中的所有行...对吗?
那么我的问题是,foreach 循环中 $datas 的内容是什么?它是一个行数组吗? $data 应该是键值,但 $data 也是一个让我很困惑的数组。
我将其可视化为 $datas = $data,所以
$datas[] = [$data[0], $data[1], $data[2], $data[3], ... $data[last_one]]
这些元素中的每一个都包含一行...
所以 foreach($datas as data) 遍历每个元素,但是要显示它我们需要回显 data[0]?
我的理解正确吗?我知道它是一个关联数组,所以那些 0、1、2... 等是表的列标题..
- 另外,当我们有 $row = fetch_assoc 时,$fetch_assoc 究竟做了什么?我们只是将行存储在 $rows 变量中吗?当我们到达最后一行时,while 循环是错误的,对吧?我只是习惯于在 while 循环中看到条件,例如 while (x == 4)。到目前为止,我从未见过我们分配变量的情况,例如 while (x = 4)。
【问题讨论】:
-
上面的代码是OOP,即面向对象编程。它不同于程序。在过程中,您可以以线性方式构建代码,而 OO 您可以基于对象构建代码。我在用手机,所以我现在无法输入其余的内容 - 但是一旦我到达我的电脑,我会回答,除非那时其他人有。同样在类中,您调用的变量称为属性,而您习惯调用函数的称为类内部的方法。
-
我看到其他人已经回答了。我会告诉你这一点——当你潜入 OOP 时,忘记 MySQLi 并学习使用 PDO。
-
在问这个问题之前,你必须学习更多的OOP(面向对象编程)。我认为stackoverflow“不是学习OPP的地方”,而是提出与基本OOP学习过程无关的具体问题。
-
我不得不问,网上任何地方都没有足够好的解释,我想这是专家认为我会弄清楚的问题,但我只需要一些确认,这样我才能继续。跨度>
-
我会说试试 PHP 聊天室,但如果你也在那里提问,我们会说阅读和学习,但至少你不会冒着被限制提问一段时间的风险,如果你在聊天中问。只需在聊天中具体提出您的问题,不要那么广泛。
标签: php mysql object-oriented-analysis