Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przykład obiektowo napisanej strony..., Gdzie możę znaleźć prosty przykład obiektowo zrobionej całej strony?
l05i3k
post 2.11.2007, 16:07:57
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
Go to the top of the page
+Quote Post
domis86
post 3.11.2007, 15:50:00
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


poczytaj se o MVC smile.gif
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)
Go to the top of the page
+Quote Post
l05i3k
post 3.11.2007, 23:00:59
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...
Go to the top of the page
+Quote Post
grudziu
post 8.11.2007, 21:45:34
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
Go to the top of the page
+Quote Post
wlamywacz
post 9.11.2007, 17:39:12
Post #5





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Zainwestuje w książkę: Helion - PHP Vademecum Profesjonalisty

Polecam
Go to the top of the page
+Quote Post
marcio
post 10.11.2007, 00:19:58
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
dr_bonzo
post 10.11.2007, 01:28:46
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.
Go to the top of the page
+Quote Post
carbolymer
post 10.11.2007, 19:43:06
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 biggrin.gif

Cytat( @ 3.11.2007, 15:50:00 ) *
poczytaj se o MVC smile.gif
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 cool.gif

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 tongue.gif) - tworząc interfejsy, po których nie można poznać że używasz bazy danych.

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ć"
Go to the top of the page
+Quote Post
Helios
post 10.11.2007, 23:24:27
Post #9





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 8.07.2006

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


Cytat(carbolymer @ 10.11.2007, 20:43:06 ) *
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.
Go to the top of the page
+Quote Post
basso
post 20.12.2010, 11:35:44
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 smile.gif. Czyli metoda $newsy->srodek_strony();

Potem dolna cześć której nie robiłem i jakieś tam logowanie smile.gif


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
Go to the top of the page
+Quote Post
Mephistofeles
post 20.12.2010, 12:54:05
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.
Go to the top of the page
+Quote Post
basso
post 21.12.2010, 11:51:12
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. ?
Go to the top of the page
+Quote Post
marcio
post 21.12.2010, 12:52:39
Post #13





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(basso @ 21.12.2010, 11:51:12 ) *
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
Go to the top of the page
+Quote Post
basso
post 21.12.2010, 21:57:22
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.
Go to the top of the page
+Quote Post
Mephistofeles
post 21.12.2010, 22:02:52
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ł.
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: 13.06.2025 - 05:11