Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $this->db->Query($query);
Forum PHP.pl > Forum > PHP
Fluke
Witam, kolejny problem z którym się spotykam, tzn nie problem ale właściwy sposób.

Mam taki kod:
  1. class Controller
  2. {
  3. public function db()
  4. {
  5. try
  6. {
  7. if(!include_once('config/config.inc.php'))
  8. throw new Exception('Błąd ładowania pliku.');
  9.  
  10. switch(DATABASE)
  11. {
  12. case 'mysql' :
  13. if(!include_once('config/db.inc.php'))
  14. throw new Exception('Nie można załadować pliku konfiguracyjnego do bazy MySQL');
  15.  
  16.  
  17. return new appMySQL($mysql);
  18.  
  19. break;
  20. }
  21. } catch(Exception $e)
  22. {
  23. echo $e->getMessage();
  24. }
  25.  
  26. }
  27. }


Oraz:

  1. <?php
  2. class mojController extends Controller
  3. {
  4. function __construct()
  5. {
  6. if($this->db()->Query('SELECT * FROM users'))
  7. echo 'ok';
  8. }
  9. }
  10. ?>


Działa więc się cieszę, ale czy to jest dobry sposób? Często widzę w niektórych frameworkach czy CMS`ach że tak się stosuje, ale czy w takich przypadkach jak mój.

Pozdrawiam.
Atomic_Cookie`
Za każdym zapytaniem od nową łączysz się z bazą danych, ja łączenie się z bazą danych zrobiłbym w konstruktorze.
Fluke
Wiem, ale chciałem uniknąć zbędnego połączenia jeśli mi jest ono nie potrzebne. Chodzi mi tylko czy to jest dobre podejście, czy raczej tego unikać. Jestem początkującym, dopiero zaczynam pracę z programowaniem obiektowym, a nie chcę źle się uczyć.
Crozin
Cytat
a nie chcę źle się uczyć.
No to:

1. Nazwa Controller sugeruje jakiś związek z architekturą MVC. Jeśli tak jest to: kontroler nie ma nic wspólnego z bazą danych i nie powinien mieć nawet do niej dostępu.
2. Klasa Exception powinna być w PHP abstrakcyjna, bo... jej obiektami nie powinno się rzucać (powinieneś skorzystać z bardziej wyspecjalizowanego typu).
3. Wyrzucenie wyjątku tylko po to by za chwilę go złapać i kompletnie nic z nim nie zrobić, poza durnym wyświetleniem wiadomości mija się z celem - już lepiej użyć exit w takim przypadku.
4. Do obsługi bazy danych masz w miarę przyzwoite rozszerzenie PDO.
5. Korzystaj z mechanizmów automatycznego ładowania klas (ang. autoloading) bo się pochlastasz z ręcznym wczytywaniem.
6. Zdajesz sobie sprawę, że Controller:biggrin.gifb() każdorazowo tworzy nowy obiekt co jest w tym przypadku raczej niekorzystne.

EDIT: I daruj sobie póki co lekturę wzorca Singleton, bo użycie jakie sugeruje @Wicepsik jest tutaj złe pod każdym względem, a de facto nie potrzebujesz tutaj nigdzie prawdziwych cech tego wzorca.
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.