Witam!
Przeglądając różne fora wiele razy czytałem, że ogólnie w programowaniu obiektowym jedna klasa powinna robić tylko jedną rzecz. To niby proste podejście, ale jak zwykle wymaga praktyki, bo jak przyjdzie co do czego to ręce się rozkładają, tak jak w moim przypadku. Mam taki fragment kodu:
<?php
class User extends Connect {
private $data = '';
protected function getAllUsers() {
$sql = 'SELECT * FROM users';
if($result = $this->connect()->query($sql)) {
$numRows = $result->rowCount();
if ($numRows > 0) {
foreach ($result->fetchAll() as $row) {
$this->data .= '<tr>';
$this->data .= '<td>' . $row['id'] . '</td>';
$this->data .= '<td>' . $row['name'] . '</td>';
$this->data .= '<td>' . $row['surename'] . '</td>';
$this->data .= '<td>' . $row['date_of_birth'] . '</td>';
$this->data .= '<td>' . $row['age'] . '</td>';
$this->data .= '<td>' . $row['phone_number'] . '</td>';
$this->data .= '<td>' . $row['email'] . '</td>';
$this->data .= '</tr>';
}
} else {
$this->data = 'Brak rekordów w bazie :(';
}
return $this->data;
}
else {
echo "Błąd :(";
}
}
}
Jest to klasa User, która dziedziczy z klasy Connect, w celu połączenia z bazą. I jedyne co robi ta metoda to wyciąga rekordy z bazy i przypisuje je do właściwości data. To jak najbardziej rozumiem. Tylko teraz pytanie, co jeśli chcę to wyświetlić na ekran? Czy stworzyć drugą metodę w klasie User, która właśnie będzie wyświetlała na ekran, czy zrobić to w tej samej metodzie, czy stworzyć zupełnie nową klasę? Ja zastosowałem to trzecie podejście i tym sposobem mam klasę ShowUser, która dziedziczy po klasie User(a ta z kolei po klasie Connect)
<?php
class ShowUser extends User {
private $datas;
public function showAllUsers() {
$this->datas = $this->getAllUsers();
echo $this->datas;
}
}
I oczywiście w pliku index Tworzę instancję klasy ShowUser i wywołuję metodę showAllUsers().
<?php
$users = new ShowUser();
$users->showAllUsers();
?>
Moje pytanie brzmi: czy podejście, które zastosowałem jest dobre i czy tak powinienem dalej robić, czy może jednym ze sposobów, o które pytałem wyżej, czy może zupełnie innym sposobem, o którym nawet nie mam pojęcia? Bardzo proszę o pomoc.
Pozdrawiam!