Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP OOP pierwsze kroki
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich.

Zacząłem bawić się w PHP OOP i PDO i piszę taki mały skrypt:

index.php
  1. <?php
  2. include('config/db.php');
  3. include('model/model.php');
  4. include('controller/controller.php');
  5. include('view/view.php');
  6. $action = new action('localhost', 'oop', 'root', 'Nanysek93');
  7. $action->callConnection();
  8. new Controller();
  9. ?>


config/db.php
  1. <?php
  2. class connect
  3. {
  4. private $host=null;
  5. private $dbname=null;
  6. private $user=null;
  7. private $password=null;
  8. public function __construct($host, $dbname, $user, $password)
  9. {
  10. $this->host=$host;
  11. $this->dbname=$dbname;
  12. $this->user=$user;
  13. $this->password=$password;
  14. }
  15. protected function connection()
  16. {
  17. try
  18. {
  19. $this->pdo=new PDO('mysql:host='.$this->host.';dbname='.$this->dbname.'', ''.$this->user.'', ''.$this->password.'');
  20. $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  21. }
  22. catch(PDOException $ex)
  23. {
  24. echo 'Polaczenie nie zostalo nawiazane: '.$ex->getMessage().'<br />';
  25. }
  26. }
  27. }
  28. class action extends connect
  29. {
  30. public function callConnection()
  31. {
  32. return $this->connection();
  33. }
  34. }
  35. ?>


controller/controller.php
  1. <?php
  2. class controller
  3. {
  4. private $model;
  5. private $view;
  6. private $title;
  7. private $header;
  8. private $contents;
  9. public function __construct()
  10. {
  11. $this->runmodel();
  12. $this->setdata();
  13. $this->getdata();
  14. $this->runview();
  15. }
  16. private function runmodel()
  17. {
  18. $this->model=new model();
  19. }
  20. private function setdata()
  21. {
  22. $this->model->title='Tytul';
  23. $this->model->header='Naglowek';
  24. $this->model->contents='Tresc';
  25. }
  26. private function getdata()
  27. {
  28. $this->title=$this->model->gettitle();
  29. $this->header=$this->model->getheader();
  30. $this->contents=$this->model->getcontents();
  31. }
  32. private function runview()
  33. {
  34. $this->view=new view($this->title, $this->header, $this->contents);
  35. }
  36. }
  37. ?>


model/model.php
  1. <?php
  2. class model
  3. {
  4. public $title;
  5. public $header;
  6. public $contents;
  7. public function gettitle()
  8. {
  9. return $this->title;
  10. }
  11. public function getheader()
  12. {
  13. return $this->header;
  14. }
  15. public function getcontents()
  16. {
  17. return $this->contents;
  18. }
  19. }
  20. ?>


view/view.php
  1. <?php
  2. class view
  3. {
  4. private $title;
  5. private $header;
  6. private $contents;
  7. public function __construct($title, $header, $contents)
  8. {
  9. $this->title=$title;
  10. $this->header=$header;
  11. $this->contents=$contents;
  12. $this->show();
  13. }
  14. private function show()
  15. {
  16. echo '<html>';
  17. echo '<head>';
  18. echo '<title>'.$this->title.'</title>';
  19. echo '<head>';
  20. echo '<body>';
  21. echo '<h1>'.$this->header.'</h1>';
  22. echo '<p>'.$this->contents.'</p>';
  23. echo '</body>';
  24. echo '</html>';
  25. }
  26. }
  27. ?>


teraz mam kilka pytań:

1. Czy dobrze rozplanowałem rozmieszczenie plików?
2. Jak mam to dalej pisać tj.: chcąc teraz dopisać jakieś pobieranie danych z bazy danych przy pomocy biblioteki PDO to gdzie co mam obsługiwać? Mam tworzyć nowe klasy czy jak to ma wyglądać?

Pozdrawiam,
adrianozo
SmokAnalog
Na tym etapie radzę po prostu uczyć się dalej. Ćwicz na prostszych przykładach, bo Twój kod póki co jest po prostu zły pod niemal każdym względem. Czytaj dalej o programowaniu obiektowym, najważniejsze to zrozumieć ideę.
adrianozo
To może pomijając te dwa pytania:

Mógłbym prosić o podpowiedź jak to miałoby poprawnie wyglądać? Nie koniecznie ten kod z pierwszego postu, ale ogólne co gdzie. Kiedy klasę dać a kiedy tylko w klasie dodawać metody itp?
SmokAnalog
Klasa to typ obiektu. Klasę dodajesz wtedy, gdy:
  • Będziesz miał kilka egzemplarzy podobnych obiektów (np. Osoba, Artykuł, Gra itd.)
  • Będziesz miał tylko jeden egzemplarz, ale używasz tego obiektu niemal wszędzie (np. połączenie z bazą danych)
  • Nie masz w ogóle egzemplarzy, ale chcesz zamknąć pewne powiązane ze sobą funkcje w klasie (które nie są już wtedy funkcjami, ale metodami statycznymi)

Nazwy klas powinno pisać się wielkimi literami.

"connect" to nie jest prawidłowa nazwa klasy. Słowo "connect" to czasownik, a nazwy klas to zawsze rzeczowniki.

Nazwa "action" to rzeczownik, ale zbyt ogólny. Nie wyobrażam sobie używać klasy "action".

Model, View i Controller to dobre pomysły na klasy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.