Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak powiązać klasy w CMS?
Forum PHP.pl > Forum > Przedszkole
VIPPER_
Hej:)

Zaplanowałem sobie klasy do serwisu. No i załóżmy, że mam jakąś tam klasę odpowiadającą za bazę danych, łączenie, zapytania itd. Tworzę również klasę np. news, dzięki której mogę dodawać, edytować, usuwać itd. newsa. Zakładam sobie, że mam główny plik np. system.php, który w zależności od zmiennej GET action (system.php obsługuje oczywiście walidację tej zmiennej) wczytuje odpowiednie pliki, np. plik do dodawania newsa. W tym pliku (powiedzmy news.php) tworzę sobie obiekt news i poprzez odpowiednie metody tworzę treść itd. W pliku system.php tworzę obiekt bazy danych, który łączy się z bazą, wykonuje zapytania. Jak teraz te obiekty powiązać? Przecież nie mogę założyć w news.php, że w system.php w zmiennej $db umieszczę referencję do obiektu bazy danych.

Bo ogólnie chce zrobić mały CMS, znam idee działania poszczególnych klas, ale nie potrafię tego jakoś ze sobą powiązać. Pomóżcie, bo już chodzę z tym kilka dni i nie mogę na nic wpaść a im dłużej się zastanawiam tym bardziej się gubię.
nospor
Cytat
Przecież nie mogę założyć w news.php, że w system.php w zmiennej $db umieszczę referencję do obiektu bazy danych.
Poczytaj o wzorcu Rejestr (Registry). Będzie tu jak ulał
VIPPER_
Czyli klasa, która łączy się z bazą danych, będzie klasą static? Czy taką klasę mogę ożyć w obrębie innej klasy? Np.:

  1.  
  2. class DB
  3. {
  4. public static function connect(...)
  5. {
  6.  
  7. }
  8. }
  9.  
  10. class news
  11. {
  12. public function addnews(...)
  13. {
  14. (...) DB:connect(...);
  15. }
  16. }
  17.  



Przeczytałem na jednej stronie, że użycie Registry jest, i tu cytuję, "prymitywne". Dlaczego? Czy jest coś lepszego?
nospor
Prosilem bys poczytal o wzorcu Rejestr a nie zgadywal smile.gif To co pokazales bardzij mi podchodzi pod Singleton

Cytat
e, że użycie Registry jest, i tu cytuję, "prymitywne". Dlaczego?
Kazdy wzorzec ma swoich zwolennikow i przeciwnikow. Ja akurat w Rejestrze nie widzę nic prymitywnego. Jakby autor cytatu podał jakąś argumentację to mozna by bylo porozmawiac.
VIPPER_
Przeczytałem cały artykuł na ten temat. Ogólnie to fajna sprawa. Tylko zastanawiam się nad innymi możliwościami i komentarzami do tego artykułu.

Dodam, że czytałem ten artykuł
nospor
inne:
- Singleton. Wiekszosc uwaza ze to ble. Mi tam wsio rybka
- przekazywanie do obiektu jako referencje

Ja uzywam Rejestru od ładnych paru lat i sobie chwalę. Nie widzę potrzeba zastanawiania się nad czyms innym
VIPPER_
No właśnie mi się ten Rejestr też spodobał. Jeszcze jedno i ostatnie pytanie. Jak myślisz, jak zaprojektować metodę wysyłającą dane do bazy danych.

Bo ja wymyśliłem takie coś:

  1. static public function preQuery(array $signature, $type, array $conditions) {...}


$signature - miałoby przedstawiać jakie nazwy pól chce wykorzystać obiekt do wysłania danych do bazy danych. Na przykład array('id', 'title', 'content')
$type - nazwa tabeli, która zostanie dołączona do prefixu
$conditions - tablica z nazwą pól oraz wartościami

W sumie to można by nie wykorzystywać $signature, wystarczyłoby tylko odczytać z $conditions.

To taki mój pomysł. Jestem nowy w OOP i nie mam za bardzo porównania, bo nigdzie nie mogę znaleźć klas CMS wykorzystujących PDO, które mógłbym podglądnąć. A jak wy realizujecie takie sprawy?
Mephistofeles
Możesz użyć ORMa i operować bezpośrednio na obiektach bez przejmowania się bazą (no tak teoretycznie) - np. Doctrine 2.
VIPPER_
Właśnie najpierw zamiast korzystać z gotowych rozwiązań, chciałbym się sam nauczyć. Dopiero potem można sobie ułatwiać życie - znając podstawy.
Mephistofeles
A ja Ci mimo wszystko radzę poczytać kody frameworków, np. Symfony 2, zobaczysz jak klasy się wiąże ze sobą w profesjonalnych aplikacjach. Natomiast co do ORMa, to nie ma związku z połączeniem klas a jest ułatwieniem sobie życia.
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.