Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obiektowa struktura newsów
janusz.master
post 6.01.2008, 21:17:06
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Witam wszystkich snitch.gif

Jestem nowicjuszem jeżeli chodzi o obiektowoś. Mam problemy z dobraniem odpowiedniego stylu w skryptach.
Nie do końca wiem jaką strukturę mają miec klasy i kod.

Mam klasę newsy - do wyswietlania aktualnosci
Jest też klasa Database - do obslugi Mysql

Tworze skrypt do wyswietlania newsów:
-pobiera zmienne z pliku config.php oraz z adresu
-łączy z baza danych
-przekazuję do obiektu news wszystkie potrzebne dane i pobieram tablicę z gotowymi newsami
-wyswietlam newsy w szablonie

Nie wiem dokladnie jak to wszystko ma byc powiazane - jak przekazywac zmienne, jak do obiektu $news przekazywac obiekt $bazy danych itd.
Wiem że to zależy od indywidualnego stylu ale chodzi mi o naprowadzenie, blizsze wyjasnienie jak to poukladac.

Z góry Dzięki biggrin.gif

  1. <?PHP
  2.  
  3. // config.php - ustawienia
  4.  
  5.  
  6. $newsy = array();
  7. $newsy[na_str] = 10;
  8. $newsy[table] = "newsy";
  9. $GLOBALS[newsy] = $newsy;
  10.  
  11.  
  12. // klasa newsy
  13.  
  14. class newsy{
  15. private na_str;
  16. private table;
  17.  
  18. function __construct($dane, $db){
  19. $this->table = $dane[table];
  20. $this->na_str = $dane[na_str];
  21. $this->db = $db;
  22. }
  23.  
  24. getNewsy($aFiltr = array()){
  25. $db = $this->db;
  26. $nr = $this->na_str * $str;
  27. $db-> setLimit($nr, $this->na_str);
  28. $db-> setWhere($aFiltr);
  29. $result = $db->select($this->table, '*');
  30. return $db->fetchRows($result);
  31. }
  32. }
  33.  
  34. // newsy.php - wyswietlanie aktualności
  35.  
  36.  
  37.  
  38.  
  39. $db = new database(); // polaczenie z mysql
  40.  
  41. // pobiera nr strony z adresu
  42. $str = '1';
  43. if (!empty($_REQUEST[s])) $id = $_REQUEST[s];
  44.  
  45. $dane = $GLOBALS[newsy];
  46. $n = new newsy($dane, $db);
  47.  
  48. $filtr = array();
  49. if (!empty ($_REQUEST[kat])) $filtr[kat] = $_REQUEST[kat];
  50. if (!empty ($_REQUEST[autor])) $filtr[autor] = $_REQUEST[autor];
  51.  
  52. $newsy = $n->getNewsy($filtr);
  53.  
  54. //...
  55.  
  56.  
  57. // newsy.tpl
  58.  
  59.  
  60.  
  61.  
  62. <table>
  63.  
  64. <?PHP
  65. foreach ($newsy as $news){?>
  66. <tr><td><?PHP echo $news[tytul]; ?> </td></tr>
  67. <tr><td><?PHP echo $news[tresc]; ?> </td></tr> <?PHP
  68. }<?PHP
  69.  
  70. </table>


I Czy dla każdego obiektu który wykonuje zapytania muszę przekazywac do konstruktora lub funkcji obiekt bazy danych?questionmark.gif

Sorry - zapomniałem wkleic klasy newsy.

Ten post edytował janusz.master 6.01.2008, 21:57:25
Go to the top of the page
+Quote Post
nospor
post 6.01.2008, 21:22:13
Post #2





Grupa: Moderatorzy
Postów: 36 459
Pomógł: 6297
Dołączył: 27.12.2004




Cytat
Jestem nowicjuszem jeżeli chodzi o obiektowoś.

Sądząc po kodzie jaki pokazales, nie tylko z obiektowości jestes nowicjuszem
nie: $tablica[index] = ....
a: $tablica['index'] = ....

W twoim kodzie generowana jest masa noticów, ale pewnie ich nie widzisz bo masz wyłączone ich pokazywanie.

Cytat
I Czy dla każdego obiektu który wykonuje zapytania muszę przekazywac do konstruktora lub funkcji obiekt bazy danych
Od biedy można tak. Ale można tez skorzystac ze wzorców projektowych takich jak: REJESTR, SINGLETON.
Ja osobiscie korzystam z rejestru.


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

"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
janusz.master
post 6.01.2008, 21:58:00
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Co do pierwszej części:
$tabela[nazwa] widziałem w jakimś innym skrypcie, odpaliłem na domowym serwerze, oraz na paru serwerach internetowych i chodziło.
Możesz sam sprawdzic.

a jesli chodzi o noticy to co dokladniej??
Go to the top of the page
+Quote Post
-=Peter=-
post 6.01.2008, 22:07:00
Post #4





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

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


Chodzi o to że error_reporting masz ustawione zapewne na "E_ALL & ~E_NOTICE", w skrypcie wpisz:
  1. <?php
  2. ?>

Wtedy będą pokazywane wszystkie błędy, w tym notatki.


--------------------
Go to the top of the page
+Quote Post
nospor
post 6.01.2008, 22:33:31
Post #5





Grupa: Moderatorzy
Postów: 36 459
Pomógł: 6297
Dołączył: 27.12.2004




Cytat
Co do pierwszej części:
$tabela[nazwa] widziałem w jakimś innym skrypcie, odpaliłem na domowym serwerze, oraz na paru serwerach internetowych i chodziło.
Możesz sam sprawdzic.
Ja wiem ze to chodzi. Ja powiedzialem ze dostajesz noticy z tego powodu a nie ze nie chodzi. To ze widziales to w innych skryptach nie znaczy ze to jest dobrze a uwierz mi na slowo ze jest źle. Źle w sensie ze wali ci noticy co juz jest nieprawidlowe. A jak zobaczyc te noticy to juz ci kolega wyzej napisal


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

"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
janusz.master
post 6.01.2008, 22:43:16
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


OK. Znalazlem cos o error_reporting i teraz widze :].
Zobaczylem prostszą strukturę bez cudzysłowów i odrazu poszedłem na łatwiznę.
W każdym razie dzięx za nawrócenie ze złej drogi biggrin.gif
Go to the top of the page
+Quote Post
Seth
post 7.01.2008, 20:29:59
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Programowanie obiektowe to nie tylko grupowanie funkcji w klasy - to cala filozofia, ktorej w Twoim skrypcie nie ma.

Jezeli chcial bys stworzyc obiektowe newsy to popierwsze musisz miec swiadomosc tego jakie obiekty w nim wystepuja.
News - klasa zawierajaca wlasciwosci takie jak tytul, tresc, date utworzenia etc.
Lista newsow (iterator) - kolekcja newsow

Powyzsze elementy odnosza sie do "modelu" (warstwy bazy danych) we wzorcu MVC, potrzeba nam wiec jeszcze kontrolera do przekazywania wywolan.
Akcji wyzwalanych przez kontroler, po np. wcisnieciu zapisz newsa.
Akcji glownej listujacej newsy.
Warstwy widoku, do ktorego przekazywana zostaje lista newsow, a tam juz wyswietlana.



To co zaprezentowales to tylko wykorzystanie funkcji PHP - funkcji obiektowych: klasy, metody, obiekty. Ale nie jest to rownoznaczne z programowaniem zorientowanym na obiekty (OOP).

Ten post edytował Seth 7.01.2008, 20:32:52
Go to the top of the page
+Quote Post
janusz.master
post 27.01.2008, 22:55:32
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 20.05.2007

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


Wiem że temat stary, ale mam pytanie odnośnie wspomnianych powyżej obiektów Data Object oraz Data Access Object.
Mam np klasę news zawierającą tylko czyste dane. Oraz listę newsów wykonującą Add, Remove, Update, Get.
I teraz pytanie czy nie powinienem tego rozbijac na 3 obiekty? NewsData-dane, News extends NewsData-funkcje związane z konkretnym newsem(pobierz komentarze etc), oraz NewsBase-funkcje zwiazane z listą newsów- Remove, Add, Update, Get etc.

Jak jest lepiej i jak powiązać te 3 elementy?? News ma dziedziczyć właściwości po NewsData, czy może zapisywać do zmiennej obiekt NewsData questionmark.gif
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 Wersja Lo-Fi Aktualny czas: 30.04.2024 - 10:11