Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Programowanie obiektowe
Forum PHP.pl > Forum > Przedszkole
ShadowD
Witam!

Mam kilka pytań dotyczących programowania obiektowego w php.

Staram się napisać stronkę za pomocą oo ale niestety moja przygoda z oo się dopiero zaczyna więc nie wiem jak powinny wyglądać poszczególne class'y.

Mój serwis ma logowanie, dodawanie artykułów, edytowanie artykułów, rejestrację, kontroler sesji, odzyskaj hasło, zmiana danych w profilu. Na razie tyle, nie wiem jak połączyć owe funkcje w class'y tz czy dodawanie i usuwanie/zmiana artykułów ma być jedną klasą...

Moim zdaniem powinno wglądać to tak (każda linia to jedna class'a):
-class'a która składa wszystko do kupy
-logowanie, kontrola sesji
-rejestracja
-odzyskiwanie hasła
-zmiana danych w profilu
-dodawanie, edytowanie, usuwanie artykułów

Proszę o poprawienie mojego pomysłu bo chyba lekko przesadziłem z dzieleniem tego na elementy??
Shili
Po pierwsze klasa, nie class'a.
Po drugie wbrew pozorom zmniejszanie na siłę ilości klas jest nieporozumieniem. W życiu nie próbujemy upchnąć tlenu do tego samego wora co samochodu, w programowaniu obiektowym już nie sprawia to jakoś problemu.

Kontrolę sesji wyrzuciłabym z logowania. Oczywiście mówiąc sporo na wyrost, nie znam Twojego projektu. Co do innych klas - jeśli rejestracja dla przykładu zawiera w odpowiadającej sobie klasie wyświetlenie formularza rejestracyjnego, sprawdzenie poprawności tego formularza oraz zarejestrowanie użytkownika również pociachałabym ją trochę bardziej.

Przeraża mnie ta klasa co składa wszystko do kupy.
sticker
troszke musisz poczytać o tym jak i co opisuje klasa. Na sieci znajdziesz odpowiednie artykuły (nawet chyba na php w artykułach coś znajdziesz)

Twój problem można by podzielić na:
klasy encyjne:
- użytkownik
- sesja
- artykuł
i kontrolery realizujące wymienione przez Ciebie akcje pogrupowane wg zastosowania na przyklad obsula uzytkownika i obsluga artykulow (czyli realizujące operacje na obiektach encyjnych)

Ilość klas nie gra roli ważne żeby wszystko miało logiczne odwzorowanie w rzeczywistości.

Powodzenia smile.gif

Jak zaplanujesz klasy i powiązania pokaż nam kawałek rysunku lub czegokolwiek co by pokazywało jak zaprojektowałeś klasy i powiązania miedzy nimi to na pewno skomentujemy i coś podpowiemy winksmiley.jpg
ShadowD
Tz dodał bym jeszcze do tych klas klasę formularz która by wszystkie formularze na stronie tworzyła, po za tym klasa która składa wszystko w całość wyciąga np z bazy danych zmienne konfiguracyjne itd...

1. Co powiecie na:
-klasa_conf (tworząca zmienne konfiguracyjne typu obecny styl title itd)
-kontroler_mysql (pobiera przy tworzeniu hasło, login itd, ma funkcje typu <pyt 2>)
-logowanie (sprawdzanie poprawności wprowadzanych danych odpytywanie [kontrolera mysql])
-kontrola_sesji (sprawdza czy wszystkie dane się zgadzają tz np ip z tym z logowania dodatkowo wpisuje czas ostatniej wizyty/podjęcia jakiejś czynności)
-rejestracja (sprawdzanie poprawności wprowadzanych danych przesłanie ich do [kontrolera mysql])
-odzyskiwanie_hasła (wysyła maile sprawdza dane)
-profil (zmiana danych w profilu i wyświetlenie ich)
-artykuły (wyświetlanie, dodawanie, edytowanie, usuwanie artykułów)
-formularz (tworzy formularze)

2. Jak powinien wyglądać kontroler prosił bym o jakiś ubogi przykład lub link do niego, podczas moich poszukiwań znajduję albo same połączenia lub gotowe mocno rozbudowane kontrolery lub jakiś mały opis jak miała by wyglądać jego funkcja??

@sticker Możesz dać link do jakiegoś sprawdzonego artykułu?? Niby czytam książkę ale to dopiero początki mojej zabawy z klasami więc każda rada się przyda a na pewno jakiś dobry artykuł...
sticker
nadal nie bardzo mi sie podoba ale załóżmy taki scenariusz dla artykułu (model uproszczony do minimum żeby załapać idee):
1) klasy:
- Profil( id, nazwaUzytkownika,....)
- Artykuł( id, tytul, tresc, data, Profil,... )
- ArtykułDAO(
function save(Artykul $artykul){
//tutaj jakis insert w najprostszym przypadku
...
mysql_query("INSERT INTO Art('title','tesc') VALUES($artykul->getTytul(),$artykul->getTresc())" );
....
}
) - dao to taka klasa co wie jak zapisać dany obiekt do bazy
- ArtykulKontroler (
/**
*zapisuje artykul do bazy
*/
function dodajArtykul(){
// tutaj pobierasz sobie dane z formularza (pozniej pewnie stworzysz sobie obiekt Request z którgo będziesz pobierał dane ale w tym modelu przyjmijmy //ze bierzemy dane prosto z tablicy $_POST/GET;)
$artykul = new Artykul();
$artykul->setTytul( $_POST['tytul'] );
$artykul->setTresc($_POST['tresc'] );
...
$artykulDAO = new ArtykulDAO();
$artykulDAO->save( $artykul );

}
function usunArtykul(){
..
}
)


i formularz wysyłany jest pod na dodaj.php
a tam masz
$artykulKontroler = new ArtykulKontroler();
$artykulKontroler->dodajArtykul();

i po bólu

Jak coś nie jasne to pytaj
Shili
Cytat
-profil (zmiana danych w profilu i wyświetlenie ich)
-artykuły (wyświetlanie, dodawanie, edytowanie, usuwanie artykułów)

Wyświetlaj za pomocą innej klasy, tymi zwracaj odpowiednie wyniki.

Kontroler o czymś "informuje". Ujmując banalny przykład - o tym jaka strona księgi gości została wywołana przez użytkownika. Ani nie wyświetla żadnych danych, ani nie ma w sobie zapytań. Również klasa składająca wszystko nie powinna mieć moim zdaniem ani zapytań, ani zaawansowanego kodu php.

Nie zapominaj też o klasach abstrakcyjnych czy interfejsach. Rejestracja, profil czy artykuły zapewne korzystają z paru tych samych rzeczy - jak walidacja danych pobranych od użytkownika, umieszczenie tych danych w bazie, czy zwrócenie ich do ponownego wyświetlenia w formularzu, jeśli walidacja zwróci błąd. Możesz na przykład zastosować do tego interfejs.
ShadowD
No tak wszystko ładnie i pięknie ale:
1. Opis interfejsu też by mi się przydał winksmiley.jpg
2. Kontroler - o czymś informuje tz np sprawdza jaką ktoś ma przeglądarkę i wysyła dalej do obróbki?
3. Prosiłem o przykład klasy [kontroler mysql] a nie artykuły winksmiley.jpg

Na razie chyba tyle, jak was denerwuje moja praktycznie zerowa wiedza o oo to wrócę do czytania itd..
Cysiaczek
Kontroler najczęściej zawiera akcje do wywołania.
Co to jest ten kontroler mysql? Coś Ci się myli jeszcze smile.gif.

Pozdrawiam.
Shili
O interfejsach
ShadowD
Nie, nie kontroler mysql to klasa przez którą są wysyłane zapytania do bazy danych tak jak w mvc jest to pośrednik pomiędzy mysql'em a skryptami.

Cytat
Kontroler najczęściej zawiera akcje do wywołania.

1. Tz to jest taka klasa która składa inne klasy i powiadamia je że są potrzebne w danym momencie(wywołanie klasy) tak??

2. Teraz takie pytanie z innej beczki czy w funkcjach klas są widziane zmienne post i get przesłane z innego skryptu
Shili
Cytat
Nie, nie kontroler mysql to klasa przez którą są wysyłane zapytania do bazy danych
Nie używaj nazwy kontroler. To co opisujesz kojarzy się ze wzorcem MVC (składową C) a ni hu hu w tym nie jest. Zrób sobie klasę obsługującą ogólnie bazę danych (lub skorzystaj z gotowej), czyli łączenie, wybieranie bazy, wysyłanie zapytania.
Nie czytałam tematu, ale może przyda Ci się ten opis. Podejrzewam, że i na forum php znajdziesz coś dla siebie.

Cytat
Teraz takie pytanie z innej beczki czy w funkcjach klas są widziane zmienne post i get przesłane z innego skryptu
Jeśli inicjujesz obiekt klasy w skrypcie, w którym są wywołane te zmienne to jak najbardziej.

Cytat
Tz to jest taka klasa która składa inne klasy i powiadamia je że są potrzebne w danym momencie(wywołanie klasy) tak??
Mniej więcej winksmiley.jpg
sticker
kontroler ma za zadanie obsłużyć żądanie wykonania jakiejś funkcjonalności np .dodawanie artykułu. Czyli przeprowadza Cie przez proces za rączke i mówi jak mnie wywołasz to zrobie to co chcesz a metoda odpowiedzialna za realizacje funkcjonalności zatroszczy sie by stworzyć/pobrac odpowiednie obiekty a pozniej zrobić z nimi to co oczekujesz że z nimi zrobie.

Tablice globalne post/get dostepne sa wszedzie choć wskazane jest żeby dostęp do nich miała tylko klasa do tego przeznaczona by je czytać. Pozwoli to na zastosowanie zasad DRY(Don't repeat yourself). Może ta fukcja przyda Ci sie do czegoś innego pozniej, przekazując jej parametry nie jesteś uzależnony od tego jaki klucz reprezentuje twoją zmienną w tablicy POST/GET. (poza tym mamy wtedy ładny przepływ danych w logice)
ShadowD
-klasa która składa wszystko do kupy to tak jak by kontroler, wcześniej nie wiedziałem że się to tak nazwa smile.gif

Tak zmienię nazwę

Wygląda to tak:
-kontroler (wywołuje inne klasy)
-klasa_conf (tworząca zmienne konfiguracyjne typu obecny styl title itd)
-mysql (pobiera przy tworzeniu hasło, login itd, łączy się z mysql i wysyła do niego zapytanie MVC)
-logowanie (sprawdzanie poprawności wprowadzanych danych odpytywanie [kontrolera mysql])
-kontrola_sesji (sprawdza czy wszystkie dane się zgadzają tz np ip z tym z logowania dodatkowo wpisuje czas ostatniej wizyty/podjęcia jakiejś czynności)
-rejestracja (sprawdzanie poprawności wprowadzanych danych przesłanie ich do [kontrolera mysql])
-odzyskiwanie_hasła (wysyła maile sprawdza dane)
-profil (zmiana danych w profilu)
-artykuły (dodawanie, edytowanie, usuwanie artykułów)
-formularz (tworzy formularze)

Teraz zostały dwa pytania:

1. Coś takiego może być??
2. Czym wyświetlać artykuły dane z profilu??

Edit: usunięte 3 pytanie...
cckoles
Po co wynajdywać koło od nowa ? Nie lepiej od razu uczyć się jakiegoś frameworka ?Prędzej czy później zrozumiesz, że sam nie jesteś w stanie napisać frameworka który by się równał dojrzałym projektom typu Zend czy Symfony.
ShadowD
A kto chce wynajdywać koło od nowa??

Nie wiem jak w na to patrzycie ale ja pisząc stronki powoli uczę się, co więcej uważam, że robię dobrze. Chce się nauczyć OO jak mogę tego dokonać, po prostu czytam książkę i staram się napisać stronkę działającą na obiektach. Jednakże nie wiem jak do końca powinno to wyglądać więc napisałem na forum w końcu każdy ma do tego prawo prawda... winksmiley.jpg

Jeśli potrzebna była by mi stronka użył bym jakiegoś "Gotowca" jednak ja się uczę i "gotowce" mi nie potrzebne. Poza tym jak nikt nie będzie się uczył php to kto będzie pisał nowe cms'y??
cckoles
Cytat(ShadowD @ 6.08.2008, 22:37:20 ) *
A kto chce wynajdywać koło od nowa??

Nie wiem jak w na to patrzycie ale ja pisząc stronki powoli uczę się, co więcej uważam, że robię dobrze. Chce się nauczyć OO jak mogę tego dokonać, po prostu czytam książkę i staram się napisać stronkę działającą na obiektach. Jednakże nie wiem jak do końca powinno to wyglądać więc napisałem na forum w końcu każdy ma do tego prawo prawda... winksmiley.jpg

Jeśli potrzebna była by mi stronka użył bym jakiegoś "Gotowca" jednak ja się uczę i "gotowce" mi nie potrzebne. Poza tym jak nikt nie będzie się uczył php to kto będzie pisał nowe cms'y??



1. jak się uczyć to najlepiej od razu dobrze ale fakt, że aby móc zacząć bawić się jakimś fw trzeba w ogóle znać OOP więc bez tej wiedzy będzie ci bardzo ciężko

2. wszystko ok pod warunkiem, że te stronki piszesz dla siebie a nie dla klientów winksmiley.jpg

3. fw to nie strona gotowiec, to w ogóle nie jest strona http://pl.wikipedia.org/wiki/Framework
ShadowD
Nie napisałem nigdy, że Frameworki to gotowce a jedynie:
Cytat
Jeśli potrzebna była by mi stronka użył bym jakiegoś "Gotowca" jednak ja się uczę i "gotowce" mi nie potrzebne. Poza tym jak nikt nie będzie się uczył php to kto będzie pisał nowe cms'y??


A z moją wiedzą to raczej nikt ode mnie ic nie kupi chyba że za 20 zł... ;p

Poza tym postarajmy się wrócić do tematu nie jest to miejsce na dyskusję... smile.gif

Pytania:

  • kontroler (wywołuje inne klasy)
  • klasa_conf (tworząca zmienne konfiguracyjne typu obecny styl title itd)
  • mysql (pobiera przy tworzeniu hasło, login itd, łączy się z mysql i wysyła do niego zapytanie MVC)
  • logowanie (sprawdzanie poprawności wprowadzanych danych odpytywanie [kontrolera mysql])
  • kontrola_sesji (sprawdza czy wszystkie dane się zgadzają tz np ip z tym z logowania dodatkowo wpisuje czas ostatniej wizyty/podjęcia jakiejś czynności)
  • rejestracja (sprawdzanie poprawności wprowadzanych danych przesłanie ich do [kontrolera mysql])
  • odzyskiwanie_hasła (wysyła maile sprawdza dane)
  • profil (zmiana danych w profilu)
  • artykuły (dodawanie, edytowanie, usuwanie artykułów)
  • formularz (tworzy formularze)
Teraz zostały dwa pytania:

1. Coś takiego może być??
2. Czym wyświetlać artykuły dane z profilu??
cckoles
Widzisz, problem polega na tym, że nie rozumiesz co to są frameworki dlatego usilnie próbujesz zbudować pewien szkielet który nie ma sensu. Jeśli zależy ci tylko na OOP to jak ponazywasz sobie klasy nie ma żadnego znaczenia. Nie ma też znaczenia jak sobie je rozmieścisz dlatego, że nie wspierając się żadnym wzorcem projektowym czy frameworkiem nikt inny i tak nie zrozumie co chciałeś napisać i o co w ogóle chodzi w twoim projekcie dlatego nie ma odpowiedzi na Twoje pytanie. Jak sobie rozplanujesz tak będzie.
ShadowD
O frameworkach czytałem na php.pl mój projekt ma ma przypominać mvc, co do stwierdzenia, że nikt nie odpowiada na mój temat to chyba się mylisz jak widać kilka osób pomogło i jestem im wdzięczny...

Jeśli nie chcesz pomóc tz odpowiedzieć na moje dwa pytania to nie ale nie musimy robić sobie z forum GaduGadu i zaśmiecać temat niepotrzebną dyskusją co rozumiem a czego nie, mam 16 lat i uczę się tworzyć stronki muszę od czegoś zacząć najpierw był html, css następnie specyfikację html i php teraz przyszedł czas na obiektowy świat php a frameworki to inna historia.

Jeśli chcesz podyskutować możemy udać się na irc/gg/chat... winksmiley.jpg
cckoles
Stary, przeczytaj najpierw co to jest MVC a pozniej zadwaj pytania. Nie mam ochoty na dyskuje tylko staram ci sie grzecznie wytlumaczyć / naprowadzić na dobrą drogę a Ty ciągle swoje. To co tworzysz nie ma nic wspolnego z MVC, naprawde, zrozum to.
ShadowD
Może i nie ma jednak po to tu pisze by ktoś naprowadził mnie na dobrą drogę...

Zamiast wytykać mi, że nie jest to MVC możesz pomóc, zresztą pisałem "ma przypominać mvc".

Ps Jakiś zdenerwowany jesteś, spokojniej a tak apropo stary to ja nie jestem...
cckoles
Cytat(ShadowD @ 6.08.2008, 23:57:50 ) *
Może i nie ma jednak po to tu pisze by ktoś naprowadził mnie na dobrą drogę...

Jakiś zdenerwowany jesteś, spokojniej... winksmiley.jpg

Ps Stary to ja nie jestem... ;p


1 MVC to wzorzec projektowy który ma na celu odseparowanie warstwy biznesowej tzw. modelu od warstwy widoku a wszystkie akcje odbywaja się w kontrolerze. Nie ma to nic wspolnego z nazewnictwem katalogow, czy klas. Dlatego błądzisz. Kontroler to też nie jest tylko klasa gdzie są ładowane inne klasy. Musisz więcej poczytać o MVC dlatego, że jeszcze mylnie pojmujesz. Wiem, że na poczatku jest trudno ale dasz rade winksmiley.jpg

2. żeby troche podejrzeć jak to wyglada u innych wejdź sobie na stronę http://codeigniter.com/ tam masz tutoriale video. Framework jest przestarzaly bo w php4 ale idealny do nauki bo jest bardzo prosty do tego tutorial video.

3. nie jestem zdenerwowany tylko staram ci się pomóc a Ty nie czytasz co pisze ;p
ShadowD
Czytam, czytam co do nazewnictwa to ja to po prostu tak napisałem ale inni zaczęli mówić bym nie mieszał nazewnictwa więc trochę zmieniłem nazwy. Staram się nauczyć OO a nie mvc choć o tym też czytałem i wydaje mi się, że nauka jednego i drugiego na raz to za dużo dla mnie. Z tym mvc to tak po drodze wynikło nieporozumienie jeszcze przed twoim przyjściem innym się to kojarzyło z nazwą mojej klasy więc tak zostało...

Na razie skończmy z tematem mvc i powróćmy do pytania z nim nie związanego.

Ale dzięki za artykuł na pewno przejrzę...
  • kontroler (wywołuje inne klasy)
  • klasa_conf (tworząca zmienne konfiguracyjne typu obecny styl title itd)
  • mysql (pobiera przy tworzeniu hasło, login itd, łączy się z mysql i wysyła do niego zapytanie MVC)
  • logowanie (sprawdzanie poprawności wprowadzanych danych odpytywanie [kontrolera mysql])
  • kontrola_sesji (sprawdza czy wszystkie dane się zgadzają tz np ip z tym z logowania dodatkowo wpisuje czas ostatniej wizyty/podjęcia jakiejś czynności)
  • rejestracja (sprawdzanie poprawności wprowadzanych danych przesłanie ich do [kontrolera mysql])
  • odzyskiwanie_hasła (wysyła maile sprawdza dane)
  • profil (zmiana danych w profilu)
  • artykuły (dodawanie, edytowanie, usuwanie artykułów)
  • formularz (tworzy formularze)
Teraz zostały dwa pytania:

1. Czym wyświetlać artykuły tak by ładnie to wyglądało, dodać jakąś kolejną klasę??
cckoles
W tym momencie ręce mi opadły laugh.gif

pytanie: 1. Czym wyświetlać artykuły dane z profilu tak by ładnie to wyglądało, dodać jakąś kolejną klasę??

odpowiedź: by ładnie wyglądało najlepiej przeanalizuj wszystko jeszcze raz, prześpij się z tematem. Bez grama złośliwości powtarzam poczytaj więcej. Bez odbioru winksmiley.jpg
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.