Прежде чем задать свой вопрос, я опубликую код: (Обратите внимание, что если вы можете просто объяснить второй вопрос, этого будет достаточно, я просто очень запутался в том, что происходит в цикле 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>
Я не понимаю пару вещей об этом коде.
Во-первых, что такое «это» в этих классах? Это просто заполнитель для объекта users, который является текущим объектом, верно? Я думаю, что это.
Во-вторых, и мой главный вопрос, когда мы вызываем функцию-член showAllUsers (), мы переходим к классу ViewUser, а затем у нас есть переменная $ datas, которая присваивается $ this-> getAllUsers (), которая в итоге возвращает $ data массив, который содержит все строки в базе данных … Верно?
Тогда мой вопрос: каково содержание $ datas в цикле foreach? Это массив строк? Предполагается, что $ data — это ключевые значения, но $ data — это тоже массив, который меня очень смущает.
Я визуализирую это как $ datas = $ data, так
$ datas [] = [$ data [0], $ data [1], $ data [2], $ data [3], … $ data [last_one]]
и каждый из этих элементов содержит строку …
Таким образом, foreach ($ datas как данные) проходит через каждый элемент, но для его отображения нам нужно отобразить данные [0]?
Правильно ли мое понимание? Я знаю, что это ассоциативный массив, поэтому эти 0, 1, 2 … и т. Д. Являются заголовками столбцов таблицы ..
Это на самом деле довольно плохо для схемы обработки классов, но ваши вопросы все еще актуальны.
$this
является ссылкой на текущий экземпляр (read: object) класса, где вы определяете метод, который использует this
ключевое слово.datas
это массив массивов (который представляет строки в таблице базы данных). Каждый элемент $datas
содержит другой массив, представляющий одну строку, где каждый элемент является столбцом этой строки. Это ассоциативные массивы, поэтому индекс, как вы сказали, является ключевым.mysqli::query
возвращает объект типа mysqli_result
, так что вы не можете получить к нему доступ напрямую как к массиву. mysqli::fetch_assoc
преобразует mysqli_result
в ассоциативный массив, строка за строкой, перемещая указатель, поэтому вы продолжаете цикл в while
цикл до fetch_assoc
возвращает false (то есть, когда в результирующем объекте больше нет строк или когда указатель достигает последней строки).Других решений пока нет …