Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> $this->db->Query($query);, Czy tak jest poprawnie? :|
Fluke
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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:(IMG:style_emoticons/default/biggrin.gif) b() 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.

Ten post edytował Crozin 11.01.2011, 21:30:31
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 16:39