ShadowD
6.08.2008, 14:17:25
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
6.08.2008, 14:27:47
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
6.08.2008, 14:52:36
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

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
ShadowD
6.08.2008, 15:04:33
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
6.08.2008, 15:17:13
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
6.08.2008, 15:18:39
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
6.08.2008, 15:29:16
No tak wszystko ładnie i pięknie ale:
1. Opis interfejsu też by mi się przydał

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

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

.
Pozdrawiam.
Shili
6.08.2008, 15:42:35
ShadowD
6.08.2008, 15:43:45
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
6.08.2008, 15:49:08
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
sticker
6.08.2008, 15:54:11
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
6.08.2008, 16:03:55
-klasa która składa wszystko do kupy to tak jak by kontroler, wcześniej nie wiedziałem że się to tak nazwa
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 MV
C)
-
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
6.08.2008, 21:01:48
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
6.08.2008, 21: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...

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
6.08.2008, 21:59:40
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...

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

3. fw to nie strona gotowiec, to w ogóle nie jest strona
http://pl.wikipedia.org/wiki/Framework
ShadowD
6.08.2008, 22:02:37
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ę...
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
6.08.2008, 22:19:38
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
6.08.2008, 22:29:03
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...
cckoles
6.08.2008, 22:50:08
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
6.08.2008, 22:57:50
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
6.08.2008, 23:08:40
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...

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

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
6.08.2008, 23:17:05
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
6.08.2008, 23:23:44
W tym momencie ręce mi opadły
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
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.