Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Jak powiązać klasy w CMS?
VIPPER_
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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ę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ł


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
VIPPER_
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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?

Ten post edytował VIPPER_ 5.01.2011, 19:39:38
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
VIPPER_
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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ł

Ten post edytował VIPPER_ 5.01.2011, 20:14:09
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
VIPPER_
post
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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?
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #8





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Możesz użyć ORMa i operować bezpośrednio na obiektach bez przejmowania się bazą (no tak teoretycznie) - np. Doctrine 2.
Go to the top of the page
+Quote Post
VIPPER_
post
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 29.12.2010

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


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.
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #10





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 06:43