PHP / MySQL, не понимая цикл foreach в данном конкретном случае. [концептуальный вопрос]

Прежде чем задать свой вопрос, я опубликую код: (Обратите внимание, что если вы можете просто объяснить второй вопрос, этого будет достаточно, я просто очень запутался в том, что происходит в цикле 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>

Я не понимаю пару вещей об этом коде.

  1. Во-первых, что такое «это» в этих классах? Это просто заполнитель для объекта users, который является текущим объектом, верно? Я думаю, что это.

  2. Во-вторых, и мой главный вопрос, когда мы вызываем функцию-член 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 … и т. Д. Являются заголовками столбцов таблицы ..

  1. Кроме того, что именно делает $ fetch_assoc, когда у нас есть $ row = fetch_assoc? Мы просто храним строки в переменной $ row? Цикл while ложен, когда мы достигаем последнего ряда, верно? Я просто привык видеть условие в цикле while, например, в то время как (x == 4). Я никогда не видел ситуации, когда мы назначаем переменную, как, например, while (x = 4), до сих пор.

-1

Решение

Это на самом деле довольно плохо для схемы обработки классов, но ваши вопросы все еще актуальны.

  1. Ты вроде как прав. $this является ссылкой на текущий экземпляр (read: object) класса, где вы определяете метод, который использует this ключевое слово.
  2. Правильно во всех случаях. Ты тоже прав в этом datas это массив массивов (который представляет строки в таблице базы данных). Каждый элемент $datas содержит другой массив, представляющий одну строку, где каждый элемент является столбцом этой строки. Это ассоциативные массивы, поэтому индекс, как вы сказали, является ключевым.
  3. Согласно документация, mysqli::query возвращает объект типа mysqli_result, так что вы не можете получить к нему доступ напрямую как к массиву. mysqli::fetch_assoc преобразует mysqli_result в ассоциативный массив, строка за строкой, перемещая указатель, поэтому вы продолжаете цикл в while цикл до fetch_assoc возвращает false (то есть, когда в результирующем объекте больше нет строк или когда указатель достигает последней строки).
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]