![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 31.08.2006 Skąd: Stalowa Wola Ostrzeżenie: (0%) ![]() ![]() |
Witam,
dopiero zaczynam przygodę z obiektowym php'em, a do tej pory tworzyłem stronki proceduralnie. Przeczytałem kilka kursów, przejrzałem kilkadziesiąt stron książki do programowania obiektowego w php (http://helion.pl/ksiazki/php5zp.htm), ale w zasadzie oprócz poznania w miare dobrze pojęć mi nic to więcej nie dało. Postanowiłem więc porpostu mniej więcej przygotowac sobie zarys aplikacji, którę chcę stworzyć i się za nią zabrać próboując zrobić to obiektowo. Jednak zatrzymałem się już na samym początku. Nie do końca wiem, jak zacząć clase. Dlatego chciałbym prosić o jakiś adres strony, na której znajduje się w miare prosty sposób wykonana jakaś strona obiektowo. Oczywiście mógłbym wziąć takie postnuke i analizować linijka po linijce, ale wątpie, abym tak szybko sie w tym połapał. Potrzebuję czegoś bardziej ludzkiego i prostrzego. Może ktoś ma gdzieś jakąś swoją starą stronę wykonaną obiektowo i zechciałby udostępnić jej kod źródłowy? (prosiłbym tylko, o to, aby w miare możliwości wykonana ona była w php5) Lub, jeśli ktoś ma czas, aby podpowiedział jak rozwiącać taki przykładowy problem: Załóżmy, że mamy jedną ogromną klasę "Tresci", a w niej chcecie umieścić podklasy Artykuły, Newsy, Recenzje itp. I teraz jak się do tego zabrać? Czy już w klasie "Tresci" do konstruktora wywalić polecenie pobrania z bazy pierwszego artykułu, badź news'a? Czy może robić to osobno w każdej podklasie? Jak wykonać konstruktor pobierający odrazu elementy z bazy danych? Łączyć się z bazą standardowo? Czy wykorzystać obiektowa bibliotekę mysqli? Czy tworzyc uchwyt w konstruktorze klasy Treści, czy zapisać metody obsługi bazy w innej klasie i włąnczyć go do bazy Tresci? Bybym wdzięczny za wszelkie rady, lub delikatne sugestie. Bardzo jednak bym prosił, o to, aby ktoś w miare możliwości udostępnił mi jakiś swój stary projekt strony zrobiony obiektowo w php5... Z góry dziękuję. Ten post edytował l05i3k 2.11.2007, 16:52:21 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 5 Dołączył: 20.03.2007 Skąd: Kraków Ostrzeżenie: (30%) ![]() ![]() |
poczytaj se o MVC
![]() MVC to przyklad sposobu na "obiektowe napisanie strony" pozniej przeczytaj sobie 2 rozdzial manuala symfony: http://www.symfony-project.com/book/1_0/02...-Symfony-s-Code jest tu opisane w praktyce jak sie stosuje mvc (jak symfony stosuje mvc) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 31.08.2006 Skąd: Stalowa Wola Ostrzeżenie: (0%) ![]() ![]() |
Ok, dzięki, napewno poczytam...
Tylko to wygląda na trochę wyższy poziom niż zwykły obiektowy php... A ja jednak wolałbym stopniowo iść do przodu... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 25.09.2006 Skąd: Gdansk Ostrzeżenie: (0%) ![]() ![]() |
nikt nic nie da, żadnego przykładu?
mi tez by się przydało... -------------------- Inteligentny dom inteligentny dom tanio
Inteligentny budynek Automatyka budynkowa LONworks KNX KNX sklep KNX sklep eib |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Zainwestuje w książkę: Helion - PHP Vademecum Profesjonalisty
Polecam |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
mam ta ksiazke powiem szczerze dobrze tlumaczy ale ja jestem za glupi zeby zrozumiec OOP
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
marcio: No to z czym masz problem? Po prostu odpusc sobie.....
Zanim ja pojalem obiekty i cala reszte to minelo 4-5lat, tak ze jestes w lepszej sytuacji, masz internet, dostep do dobrych ksiazek itp, to po prostu trwa troche. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 12 Dołączył: 27.01.2007 Skąd: north Poziom: 158 Tytuł: Miszcz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Zanim ja pojalem obiekty i cala reszte to minelo 4-5lat, tak ze jestes w lepszej sytuacji, masz internet, dostep do dobrych ksiazek itp, to po prostu trwa troche. Heh, programowanie proceduralne to tak jakbym sie cofnął o 3 miesiące w czasie, teraz jak zaglądam do tamtejszego kodu to dziwię się jaki byłem niechluj i zastanawiam sie czemu nie korzystałem z php 5 ![]() poczytaj se o MVC ![]() MVC to przyklad sposobu na "obiektowe napisanie strony" pozniej przeczytaj sobie 2 rozdzial manuala symfony: http://www.symfony-project.com/book/1_0/02...-Symfony-s-Code jest tu opisane w praktyce jak sie stosuje mvc (jak symfony stosuje mvc) MVC jak na początek przygody z programowaniem obiektowym to chyba trochę za wiele ![]() Spróbuj zrobić tak żeby było wygodnie i z zachowaniem umiaru. Pamiętaj o zasadzie kapsułkowania (rozdzielania zadań do mniejszych podjednostek) i strzeż się od przedawkowania tejże zasady. Ja bym zrobił to tak: class DBDriver{} Tutaj dajesz obsługę mysql - czyli przechwytywanie błędów, zabezpieczanie przed SQLInjection, wykonywanie kwerend, łączenie i rozłączanie. class Contents {} Ta klasa przechowuje referencję do DBDriver, obsługuje operacje wspólne dla klas dziedziczonych (czyli np. głosowanie, komentowanie) class Article extends Contents {} Ta klasa ma te metody, które nie mogą być użyte w klasie News class News extends Contents() {} Ta klasa ma te metody, które nie mogą być użyte w klasie Article Spróbuj napisać swój kod jak najbardziej abstrachując (chyba tak sie to pisze ![]() Tak naprawdę proponowałbym ci nie dzielić dane na klasy, ale części aplikacji np. połączenie z bazą, operacje na newsach, wyświetlanie, śledzenie błędów. Spróbuj może opisać jaśniej swój problem. Ten post edytował carbolymer 10.11.2007, 19:47:49 -------------------- Blog | plugin system by carbolymer
Residence: #php.pl @ IRCNet "Pralki powstały po to, aby kobiety też mogły programować" |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tak naprawdę proponowałbym ci nie dzielić dane na klasy, ale części aplikacji np. połączenie z bazą, operacje na newsach, wyświetlanie, śledzenie błędów. Spróbuj może opisać jaśniej swój problem. Dlaczego nie dzielic danych na klasy? W Javie, ktora jest typowo obiektowym jezykiem nawet takie typy danych jak liczba (Integer), ciag znakow (String, StringBuffer) to obiekty. Przeciez, gdyby programowie obiektowe polegalo na samej agregacji dzialan do odrebnych klas to by nic z tego nie bylo - kod proceduralny ubrany w klasy. Jezeli obiekty konkretyzuja obiekty na wskutek wywolan swoich metod i przekazuja innym obiektom te rezultaty to chyba wlasnie dopiero ma sens. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam identyczny problem jak kolega który założył ten temat. Wcześniej stworzyłem sporo systemików w Javie, C++ etc. Umiem programować obiektowo. Jednak nigdzie nie ma przykładów, jak powinna wyglądać struktura obiektowej strony. W jaki sposób umieszczać pliki, w jaki sposób przekazywać dane do głównego indexu etc. Nie ma nawet najmniejszego przykładu w ksiażkach. Z tego co przeglądnąłem w empikach ebookach to wszędzie uczą od podstaw PHP5. Jeśli ktoś tworzy takie strony, bądź wie jak powinno to wyglądać dołączam się do słów "pomóżcie". Ja widzę to w ten sposób: Index.php => główny plik przez który wszystko będzie przechodziło. Index.php Kod <?php include("silnik.php"); ?> <html> <body> <?php // obiekty tworzymy w silniku echo $menu->wyswietl(); // echo $newsy->srodek_strony_wyswietl(); echo $newsy->dolna_czesc_strony_wyswietl(); echo $logowanie ->logowanie(); </body> </html> Teraz trzeba w silniku.php załadować wszystkie klasy i przełączać odpowiednie pliki (czyli taki kontroler). silknik.php Kod --------------------------------------- Sekcja startowa ---------------------------- <?php include("all_class.php"); // załaduj najpierw klasy abyśmy mogli z nich korzystać --------------------------------------- Sekcja bezpieczeństwa ---------------------------- zabezpiecz=new bezpieczenstwo(); // jakiś obiekt odpowiedzialny za bezpieczeństwo strony echo zabezpiecz->skrypty() // tutaj można sprawdzać w metodzie czy przy pierwszym wejściu skrypty były okej ->poziom_dostepu(); // ustaw poziom dostępu kogoś kto jest na stronie ->sprawdz_pliki_po_zalogowaniu() // sprawdź kompatybilność plików --------------------------------------- Sekcja zmiany treści ---------------------------- // teraz jest problem bo trzeba się bawić jakby w procedularne wywołania. //Np. Kliknęliśmy w link index.php?akcja=relacje newsy= new newsy(); // Tworze obiekt newsów $newsy-> $_GET['akcja'](); // nazwa funkcji taka jak nazwa akcji czyli u nas "relacje" --------------------------------------- Sekcja końcowa ---------------------------- //Zamykanie bazy etc. $baza->close(); ?> Przedstawię klasę newsy Kod class newsy { private $tekst_newsow; public function srodek_strony_wyswietl() // Wypisz nasz srodek strony { return $this->$tekst_newsow; } public function relacje () // czyli nasza którą wywołujemy { // $baza = new baza; $baza->polacz(newsy); -> połącz z bazą z newsami , jakieś tam newsy $this->tekst_newsow= $baza->zwroc(newsy); } // Jeśli zła nazwa metody public function __call ($nazwa,$parametr) { $this->tekst_newsow="Przepraszamy ale takiej strony nie ma"; $this->srodek_strony_wyswietl(); // } } Czyli teraz po kolei jak zostanie odczytywany kod. Najpierw ładowany jest index.php w którym najpierw ładowany jest silnik.php: I w silniku: ----> ładowani klas all_class.php -> no bo najpierw musimy załadować klasy żeby potem stworzyć z nich obiekty ----> potem przykładowe metody bezpieczeństwa ----> zmiana treści w naszym przypadku wywołana jest metoda relacje która pobiera nam "newsy relacje" ----> zamykanie połącznień sekcja końcowa -> koniec silnika.php Po zakończeniu skryptu silnika jesteśmy w tym miejscu w pliku index.php Kod <?php include("silnik.php"); ?> <--- ZAKOŃCZYŁ SIĘ SILNIK I PRZECHODZIMY DALEJ <html> <body> ... [code] Następnie idą zgodnie z kodem , następuje sekcja <html><body>. W body mamy następnie: [code] <?php echo $menu->wyswietl(); echo $newsy->srodek_strony_wyswietl(); echo $newsy->dolna_czesc_strony_wyswietl(); echo $logowanie ->logowanie(); </body> Czyli wyświetlamy jakieś tam nasze menu które ja nie robiłem. Potem finalna nasza praca. Wyświetlanie środka strony. W naszym przypadku to będą nasze newsy ![]() Potem dolna cześć której nie robiłem i jakieś tam logowanie ![]() Ja to tak wymyśliłem, nie wiem czy to jest zgodne z czymkolwiek, ale nigdzie nie ma książek i nie wiem czy w ten sposób możemy postępować. Proszę o pomoc. Ten post edytował basso 20.12.2010, 11:47:28 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
http://symfony-reloaded.org/
Chyba jeden z najlepszych frameworków dostępych dla PHP, sprawdź kod. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
A jest ktoś w stanie wcześniejszy przykład przedyskutować. Czy tak to może być etc. ?
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
A jest ktoś w stanie wcześniejszy przykład przedyskutować. Czy tak to może być etc. ? Tak jest do bani, to jedna wielka kiszka, z mvc/mvp ma to malo wspolnego. Gdzie jest jakis dispather i router? Gdzie masz bootstrap? GDzie masz podzielona aplikacje na elementy m/v/c...? itp....itd... -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
To proszę pokazać jak to można zrobić dobrze.
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Zajrzyj w link, który Ci dałem, przeanalizuj kod, przykłady. Kod samego frameworka pewnie Cię przerośnie, ale nic nie stoi na przeszkodzie, żebyś go (czy innych) używał.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 05:11 |