18:00 <@Vengeance> Dzis zajmujemy sie OOP
18:00 <@Vengeance> rozwinmy skrot:
18:00 <@Vengeance> OOP = Object Orienting Programming
18:00 <@Vengeance> co w przekladzie na polski daje nam
18:00 <@Vengeance> Programowanie Zorientowane Obiektowo
18:01 <@Vengeance> przyklady beda oparte o PHP
18:01 <@Vengeance> choc raczej wiele ich nie bedzie, gdyz mamy sie tu zajac teoria barzdiej niz praktyka
18:01 <@Vengeance> Teraz na sam poczatek slucham pierwszym pytan... bym mogl sie ewentualnie w odpowiednim momencie odniesc :]
18:01 <@Vengeance> *pierwszych
18:01 <@phoenix__> 18:01:49
18:01 <@Vengeance> sa jakeis?
18:01 <@phoenix__> !time
18:01 -phoe:#wyklady- 18:03:04
18:02 <@phoenix__> zle u m34la zegar chodzi
18:02 <@phoenix__> ja mam
18:02 < nooga> hm
18:02 < defc0n> :D
18:02 <@phoenix__> czy tyo jest na wszystkich jesyskach OO ?
18:02 < defc0n> u mnie punkt
18:02 < defc0n> 18
18:02 <@Vengeance> ktos cos jeszcze?
18:02 < nooga> Vengeance: jak bardzo OOP w PHP jest ubogi wzgledem takiego z C# np.
18:02 < Astarot> a co z roznicami w OOP pomiedzy php4 php5 ? wskazesz je podczas wykladu ?
18:02 < nooga> ?
18:03 <@Vengeance> ok, tak wiec:
18:03 <@Vengeance> phoenix__:
18:03 <@phoenix__> Vengeance: btw po co 2 razy +m ? ;>
18:03 <@Vengeance> Nie kazdy jezyk udostepnia "narzedzia" do programowania obiektowego
18:03 <@phoenix__> Vengeance: ale np C++
18:03 <@Gynvael> phoenix__: csii
18:03 <@Vengeance> phoenix__: nie wiem, Opera mi tak robi
18:03 <@Vengeance> ale cii
18:03 <@Gynvael> ;>
18:03 <@Vengeance> jednak o ile juz jakis
18:04 <@Vengeance> udostepnia
18:04 <@Vengeance> to teoria
18:04 <@Vengeance> jest wspolna dla wszystkich
18:04 <@Vengeance> rozni sie tylko implementacja (ale i tak nie znacznie)
18:04 <@Vengeance> model obiektowy w PHP jest najbardziej podobny do tego z Javy
18:05 <@Vengeance> Co do samego wykladu... nie jestem specem czy cos. opowiem to co sam wiem na podstawie rocznego doswiadczenia. Zeby nie przynudzac damy sobie spokoj z takimi pojeciami
18:05 <@Vengeance> jak Abstrakcja, Hermetyzacja czy Polimofrizm
18:05 <@Vengeance> o tym dla zainteresowanych na: http://pl.wikipedia.org/wiki/Programowanie_obiektowe
18:05 <@Vengeance> tutaj postaram sie dzis opisac wszystko obrazowo tak by kazdy zrozumial
18:05 <@Vengeance> Astarot:
18:05 <@Vengeance> wyklad bedzie odnosil sie wylacznie do php5
18:05 <@Vengeance> jednak na koniec jesli starczy czasu moge wykazac roznice w php4/php5...
18:06 <@Vengeance> ewentualnie sa odpowiednie artykuły (linki potem moge podeslac)
18:06 <@Vengeance> CamelPOOP: OOP w php a OOP w C# ... nie odpowiem
18:06 <@Vengeance> bo nie wiem :]
18:06 <@Vengeance> ale teoria jest ta sama ;]
18:06 <@Vengeance> Ok zaczynam
18:07 <@Vengeance> Mamy obecnie dwa glowne "nurty" programowania
18:07 <@Vengeance> strukturalny(proceduralny) i obiektowy
18:07 <@Vengeance> (przynajmniej jesli mowa o php!)
18:07 <@Vengeance> w strukturalnym wszelkie dzialania sa wykonywane od gory do dolu... po kolei tak jak zostaly
18:07 <@Vengeance> napisane
18:08 <@Vengeance> to chyba wszyscy wiemy
18:08 <@Vengeance> pewna alternatywa jest uzywanie funkcji (w php nie ma rozroznienia miedzy funkcje a procedure jak to mamy np. w pascalu)
18:08 <@Vengeance> pozwoli to nam na utrzymanie kodu w wiekszym porzadku... odpowiedni podzial zadan itp
18:09 <@Vengeance> jednak z czasem same funkcje przestaja wystarczac i tu wkracza OOP
18:09 <@Vengeance> jaki wniosek z tego co wyzej napisane? Jezeli piszecie cos prostego wcale nie musi byc to pisane obiektowo
18:09 <@Vengeance> Nie poddawajmy sie modzie pisania obiektowo... czasem to nie ma racji bytu
18:10 <@Vengeance> Tak jak w programowaniu strukturalnym mamy rozne struktury i funkcje
18:10 <@Vengeance> tak w OOP mamy klasy i obiekty
18:10 <@Vengeance> klasa definiuje pewien wzorzec (tak to nazwe)...
18:10 <@Vengeance> zas obiekt jest KONKRETNA INSTANCJA klasy... zaraz to wyjasnie prosciej
18:11 <@Vengeance> przyjmijmy, ze mamy klase "Czlowiek"
18:11 <@Vengeance> to jest klasa :] opisuje ze czlowiek ma imie, dany kolor oczu i wlosow... jakis tam wzrost i wage itd
18:11 <@Vengeance> Czym bedzie wiec obiekt? To kazdy z nas ;]
18:11 <@Vengeance> Np. ja
18:11 <@Vengeance> Jestem Michal, mam zielone oczy, ciemne wlosy, wzrost i wage taka i taka
18:12 <@Vengeance> kroto mowiac... implementuje klase Czlowiek
18:12 <@Vengeance> obiektow jednej klasy mozemy miec w aplikacji bardzo wiele...
18:12 <@Vengeance> kazdy z nich moze miec inne wartosci argumentow (zmiennych wewnetrznych, wspomniany wzrost waga itp)
18:13 <@Vengeance> lecz mamy pewnosc, ze jesli obiekt jest klasy Czlowiek to na pewno te argumenty posiada!
18:13 <@Vengeance> pytania?
18:13 < defc0n> nie
18:14 < Reqamst> obiekty moga odnosic sie naraz do dwoch klas?
18:14 <@Vengeance> Reqamst: nie...
18:14 <@Vengeance> po czesci nie ;]
18:14 <@Vengeance> po czesci tak
18:14 <@Vengeance> potem to wyjasnie...
18:14 <@Vengeance> pytanie zapamietane
18:15 <@Vengeance> ok... jezeli chodzi o PHP to klasy i obiekty deklarujemy tak:
18:15 <@Vengeance> class {
18:15 <@Vengeance> // ... argumenty i metody
18:15 <@Vengeance> }
18:15 <@Vengeance> by stworzyc obiekt danej klasy piszemy
18:15 <@Vengeance> $zmienna = new ;
18:16 <@Vengeance> pojawily sie terminy "argument" i "metoda"... z czym to sie je?
18:16 <@Vengeance> argumenty to tak jakby zmienne wewnatrz klasy.
18:16 <@Vengeance> metody zas to nic innego jak funkcje pozwalajace na operacje na obiekcie (np. zmiane wartosci argumentow)
18:17 <@Vengeance> zauwazmy ze przy pisaniu strkturalnym
18:17 <@Vengeance> $zmienna miala by scisle okreslona wartosc
18:17 <@Vengeance> tzn byla by tam liczba, albo jakis ciag znakow... ewentualnie tablica
18:17 <@Vengeance> my mamy pod nia zapisany obiekt!
18:18 <@Vengeance> Obiekt, ktory ma wlasny stan (argumenty) oraz zachowanie (metody)
18:18 <@Vengeance> pytania? :]
18:18 < Evill> tak
18:18 < Evill> albo nie :)
18:19 < jaro3000> ja mam pytanie do poprzedniej czesci bo nie zdazylem: dlaczego zeby nie przynudzac pomijamy to co najciekawsze w OOP ? :-P
18:19 <@Vengeance> bo o tym tez powiemy... ale nie uzywajac dziwnych terminow
18:19 < mosquito> hi
18:19 <@Vengeance> o ktorych poczatkujacy nie beda miec pojecia
18:19 <@Vengeance> nie oto tu chodzi
18:19 < jaro3000> aha i taki path - czesto to co Ven nazywa argument jest tez nazywane "pole"
18:19 < mosquito> evill sadzac po twoim zachowaniu nie prgniesz zarzegnania kofliktu?
18:20 < mosquito> tak mam to rozumiec?
18:20 <@Vengeance> mosquito: ciii... wyklad jest !
18:20 < mosquito> mimo ze ja zaprzestalem z toba wlaczyc?
18:20 <@Vengeance> sprawy prywatne na priv
18:20 < mosquito> aha sory ;]
18:20 < Evill> hmm
18:20 < Evill> prv jak juz
18:20 < Astarot> nie ma pytan.. +m :]
18:20 < jaro3000> argument jest raczej rozumiany jako argument funkcji...
18:21 < jaro3000> i nie mam wiecej pytan :-)
18:22 <@Vengeance> class Czlowiek
18:22 <@Vengeance> {
18:22 <@Vengeance> public $imie;
18:22 <@Vengeance> public $nazwisko;
18:22 <@Vengeance> public $nick;
18:22 <@Vengeance> public function WyswietlDane()
18:22 <@Vengeance> {
18:22 <@Vengeance> echo $this->imie;
18:22 <@Vengeance> echo $this->nazwisko;
18:22 <@Vengeance> echo $this->nick;
18:22 <@Vengeance> }
18:22 <@Vengeance> }
18:22 <@Vengeance> $vengeance = new Czlowiek;
18:22 <@Vengeance> $vengeance->imie = 'Michal';
18:22 <@Vengeance> $vengeance->nazwisko = 'Stanowski';
18:22 <@Vengeance> $vengeance->nick = 'Vee';
18:22 <@Vengeance> $vengeance->WyswietlDane();
18:22 <@Vengeance> zarzucam duzym kodem... zaraz to przeanalizujemy... albo jeszcze moment
18:22 <@Vengeance> http://phpfi.com/80995
18:22 <@Vengeance> tutaj macie to samo
18:22 <@Evill> fjny kod czaje ale juz sie nieodzywam :0p
18:23 <@Vengeance> widzimy wiec deklaracje klasy Czlowiek
18:23 <@Vengeance> klasa ta ma argumenty i metode
18:23 <@Vengeance> argumenty okreslaja imie nazwisko i imie
18:23 <@Vengeance> metoda te dane wyswietla.
18:24 <@Vengeance> Teraz by moc z tego skorzystac tworzymy nowy obiekt tej klasy
18:24 <@Vengeance> robi to ta linia: $vengeance = new Czlowiek;
18:24 <@Vengeance> o tym juz mowilismy...
18:24 <@Vengeance> nastepnie przypisujemy argumentow odpowiednie wartosci
18:24 <@Vengeance> i je wyswietlamy (odpowiednia metoda)
18:24 <@Vengeance> Nie bede tu dokladnie opisywac co i jak sie robi (pisze) w php... bo to mial byc wyklad o teorii raczej
18:25 <@Vengeance> Teraz zajmiemy sie tymi "dziwnymi pojeciamy" o ktorych byla mowa wyzej
18:25 <@Vengeance> jako ze OOP stworzyli ludzie... to i ustalili jakies zasady
18:26 <@Vengeance> zasady te mowia o tym jak klasy powinny byc pisane, co w sobie zawierac itp
18:26 <@Vengeance> Maksymalnie lopatologiczne wytlumaczenie:
18:27 <@Vengeance> klasa powinna opisywac dokladnie tylko jedna rzecz... ciezko to opisac ladnymi slowami wiec przyklad:
18:27 <@Vengeance> jezeli mamy biblioteke
18:28 <@Vengeance> to tworzymy odpowiednie klasy Biblioteka, Ksiazka, Regal...
18:28 <@Vengeance> jak sami widzicie obiekty te sa "niepodzielne"
18:28 <@Vengeance> i stanowia abstrakcje na rzeczywiste przedmioty z przyrody
18:28 <@Vengeance> nie mozna ich jak kolwiek ze soba polaczyc w obrebie jednej klasy...
18:28 <@Vengeance> bo przeciez klasa "Ksiazka" moze miec metode "czytaj"
18:29 <@Vengeance> ale "Regal" juz raczej nie :]
18:29 <@Vengeance> takze argumenty beda zupelnie inne.
18:29 <@Vengeance> jesli lubicie naukowe wyjasnienia
18:29 <@Vengeance> zapraszam na
18:29 <@Vengeance> http://pl.wikipedia.org/wiki/Programowanie_obiektowe
18:29 <@Vengeance> i przeczytajcie o "Abstrakcja"
18:29 <@Vengeance> Enkapsulacja
18:30 <@Vengeance> wielu poczatkujacych
18:30 <@Vengeance> robi wielki blad
18:30 <@Vengeance> robiac z klas istne pojemniki na funkcje
18:30 <@Vengeance> robia klase News
18:30 <@Vengeance> i zawieraja w niej usuwanie/edycje/dodawanie
18:30 <@Vengeance> wyswietlanie
18:30 <@Vengeance> a czasem zdazy sie ze i logowanie uzytkownika tam wrzuca :]
18:30 <@Vengeance> robi sie smietnik :/
18:31 <@Vengeance> Klasy i Obiekty maja upozadkowac kod
18:31 <@Vengeance> ukryc implementacje
18:31 <@Vengeance> pomyslcie:
18:31 <@Vengeance> otwieracie cudzy kod... nie widzicie tak wywolan zadnych standardowych funkcji PHP... zadnych komentarzy...
18:31 <@Vengeance> ale mimo to doskonale sie domyslacie co ow kod robi
18:31 <@Vengeance> bo wyglada on tak:
18:32 <@Vengeance> $ksiazka = new Ksiazka();
18:32 <@Vengeance> $ksiazka->numer = 1457;
18:32 <@Vengeance> $regal = $biblioteka->PobierzRegal("sztuka");
18:32 <@Vengeance> $regal->DodajKsiazke($ksiazka);
18:32 <@Vengeance> odpowiednie nazewnictwo metod, argumentow i samych nazw klas pozwala nam stworzyc kod
18:33 <@Vengeance> ktory po prostu sie czyta milo i przyjemnie niczym ksiazke :]
18:33 <@Vengeance> bo przeciez nie wazne jest dla nas jak ktos dokladnie rozwiazal dodawanie ksiazki do bazy MySQL
18:33 <@Vengeance> wazna jest ogolna zasada dzialania
18:33 <@Vengeance> chwila na pytania... a ja cos przygotuje
18:33 < kamikaze> re
18:33 < kamikaze> :)
18:34 < kamikaze> wpadam ,a tu wykład , spoko
18:34 <@Vengeance> piszcie co wam nie pasuje... bo nikt nie mowil ze vee umie nauczac ;]
18:35 < Astarot> piszesz ze poczatkujacy robia wielki blad robiac pojemniki na funkcje [ dodaj,usun,edytuj ] a jak prawidlowo powinno to byc podzielone ;> ?
18:35 <@Vengeance> tu wchodzimy w kwestie wzorcow obiektowych... wzorce to po prostu schematy rozwiazania czestych problemow
18:36 <@Vengeance> podstawowa zasada
18:36 <@Vengeance> to to by nasz kod podzielony byl na trzy warstwy
18:36 <@Vengeance> warstwa danych, warstwa logiki i warstwa wyswietlania (ogry maja warstwy ;p)
18:36 <@Evill> :C
18:36 <@Evill> :)
18:37 <@Vengeance> tak wiec dla operacji dodan/usun/edit (czyli takich gdzie operujemy na sql/txt) powinny byc przygotowane jednne klasy
18:37 <@Vengeance> dla wyswietlania danego newsa/newsow kolejna
18:37 <@Vengeance> warstwa logiki to zas warstwa laczaca 2 pozostale
18:37 <@Vengeance> decyduje co zrobic... pobiera dane, obrabia je i przekazuje do wyswietlenia
18:37 <@Vengeance> google -> MVC
18:37 <@Vengeance> co to daje? to, oco nam chodzi w OOP
18:38 <@Vengeance> wymieniajac jedna klase
18:38 <@Vengeance> mozemy zmienic sposob wyswietlania
18:38 <@Vengeance> albo miejsce pobierana danych z txt na RSS!
18:38 <@Vengeance> i nie musimy ingerowac w ani kawalek pozostalego kodu (dwoch innych klas)
18:38 <@Vengeance> jezeli zrobimy klase tylko po to by wzrucic tam WSZYSTKIE funckje jak kolwiek zwiazane z newsami
18:39 <@Vengeance> tracimy te mozliwosc
18:39 <@Vengeance> a i kod jest mniej czytelny
18:39 <@Vengeance> jasne w miare?
18:39 < jaro3000> ... i wracamy do kodu strukturalnego tak naprawde
18:39 < jaro3000> :-)
18:39 < Astarot> i cebula ma warstwy :P jasne
18:39 < kamikaze> albo czy zrobienie klasy strona, a w niej wszystkie elementy strony ma sens? to chyba taki przykład bałaganu , albo moze to dobry pomysła na warstwe wyswietlania?
18:39 < jaro3000> jak slonce :-)
18:40 <@Vengeance> kamikaze: nie jest zle.. nawet jest taki wzorzec, nazywa sie wlasnie "Page" bodajrze...
18:40 <@Vengeance> mozna poczytac
18:40 <@Vengeance> dobra...
18:40 <@Vengeance> napisalem o tym
18:40 <@Vengeance> ze az (min) 3 klas nam potrzeba
18:40 <@Vengeance> kolejny problem to komunikacja pomiedzy nimi
18:40 <@Vengeance> prawda? :>
18:40 <@Vengeance> z mojego doswiadczenia wynika
18:41 <@Vengeance> ze wiele osob przenosi do OOP zle nawyki z programowania strukturalnego
18:41 <@Vengeance> np. stosuja tablice $GLOBALS[]
18:41 <@Vengeance> czy tez zapis w metodzie "global $zmienna";
18:42 <@Vengeance> dlaczego to jest zle?
18:42 <@Vengeance> kod OOP z def. ma byc maksymalnie elastyczny
18:42 <@Vengeance> pozwalac na wymiane dowolnych jego elementow... tak by nei wplywalo to na dzialanie reszty aplikacji
18:42 <@Vengeance> z Globalsami jest ten problem
18:42 <@Vengeance> ze wystarczy zmienic nazwe zmiennej w jednym miejscu (lub ja nadpisac) i juz nam sie wszystko sypie
18:43 <@Vengeance> dlatego o ile to mozliwe powinnismy przekazywac potrzebne dane po prostu jako argumenty wywolania metod
18:43 <@Vengeance> czyli np.
18:44 <@Vengeance> $news = new News();
18:44 <@Vengeance> $news->title = $_POST['title']; //oczywiscie jakos filtrujemy dane z POST
18:44 <@Vengeance> $kontener = new Newsy();
18:44 <@Vengeance> $kontener->Dodaj( $news );
18:44 <@Vengeance> tutaj przekazujemy jeden obiekt drugiemu jako argument wywolania metody
18:45 <@Vengeance> teraz w metodzie Dodaj mozemy robic wszystko z obiektem $news
18:45 <@Vengeance> Innym sposobem jest tez zawieranie sie w sobie obiektow
18:46 <@Vengeance> http://phpfi.com/80998
18:46 <@Vengeance> tutaj kod
18:47 <@Vengeance> class Rower
18:47 <@Vengeance> {
18:47 <@Vengeance> public $kierownica;
18:47 <@Vengeance> public $pedaly;
18:47 <@Vengeance>
18:47 <@Vengeance> public function Jedz()
18:47 <@Vengeance> {
18:47 <@Vengeance> $this->pedaly->Obroc();
18:47 <@Vengeance> }
18:47 <@Vengeance> public function Skrec()
18:47 <@Vengeance> {
18:47 <@Vengeance> $this->kierownica->wLewo();
18:47 <@Vengeance> }
18:47 <@Vengeance> }
18:47 <@Vengeance> $rower = new Rower();
18:47 <@Vengeance> $rower->kierownica = new Kierownica();
18:47 <@Vengeance> $rower->pedaly = new Pedaly();
18:47 <@Vengeance> mamy tu wszystkie elementy o ktorych powiedzielismy juz
18:47 <@Vengeance> pomimo iz "Rower" jest w miare szczegolowym opisem przedmiotu...
18:48 <@Vengeance> to i tak dzielimy go na inne obiekty jak Kierownica czy Pedaly
18:48 <@Vengeance> Nastepnie wstawiamy je jako wartosc dla argumentow obiektu $rower
18:48 <@Vengeance> Pytanie, po co tak kombinowac?
18:48 <@Vengeance> Dla elastycznosci :]
18:48 <@Vengeance> Dla przykladu klasa Kierownica
18:49 <@Vengeance> jej metody to wLewo(), wPrawo(), naWprost()
18:49 <@Vengeance> po napisaniu calej jej implementacji juz dluzej nie obchodzi nas to
18:49 <@Vengeance> jak to sie dzieje iz kierownica skreca
18:49 <@Vengeance> by tylko wydajemy polecenia....
18:49 <@Vengeance> (wspomniana wczesniej abstrakcja)
18:50 <@Vengeance> Na rynku mamy rozne kierownice ;]
18:50 <@Vengeance> (rozne obiekty klasy Kierownica)
18:50 <@Vengeance> kazda z nich ma inne argumenty... i np. jedna moze lepiej skrecac od drugiej
18:50 <@Vengeance> by do naszego roweru wlozyc te lepsza kierownice wystarczy zmiana jednej lini!
18:50 <@Vengeance> $rower->kierownica = new Kierownica();
18:50 <@Vengeance> na
18:51 <@Vengeance> $rower->kierownica = new KierownicaZa150zl();
18:51 <@Vengeance> tutaj wypada powiedziec o dziedziczeniu... to za sekunde
18:51 <@Vengeance> Widzimy wiec ze wystarczyla jedna linia by nasz rower skrecal szybciej
18:51 <@Vengeance> przekladajac to na informatyke
18:51 <@Vengeance> wystarczy jedna linia by np. zmienic sposob pobierania newsow
18:51 <@Vengeance> z plikow TXT na baze SQL lub RSS
18:52 <@Vengeance> wystarczy jedna linia kodu.. by newsy nie wyswietlaly sie jako HTML, ale jako PDF !
18:52 <@Vengeance> po prostu laczymy odpowiednie (wczesniej napisane przez nas, lub innych) klocki w calosc
18:52 <@Vengeance> przy psianiu strukturalnym musielibysmy przekopiowywac cale setki lini kodu
18:52 <@Vengeance> pytajcie prosze... bo czuje ze cienko mi idzie ;p
18:53 < Astarot> mam nadzieje ze ktos robi logi ;>
18:53 < Astarot> dobrze jest
18:53 < kamikaze> dobrze idzie
18:53 < Reqamst> ja robie sobie wlasne notatki ;p
18:53 <@Vengeance> ok... proponuje przerwe na jakies 5 minut
18:53 <@Vengeance> ok?
18:53 < Dale^anime> taa robi
18:53 <@Vengeance> tylko zjem ze 3 placki zeby starsza dala spokoj ;p
18:53 < jaro3000> jak z konstruktorem jest w PHP ?
18:54 < jaro3000> jak sie go przeciaza ?
18:54 <@Vengeance> bedzoe o tym mowa :]
18:54 <@Vengeance> ok...
18:55 <@Vengeance> mowilismy juz ze klasa ma swoje argumenty i metody...
18:55 <@Vengeance> jednak nie wspomnialem o "metodach specjalnych" :> tak to nazwijmy dla uproszczenia
18:55 <@Vengeance> mowa o ww. konstruktorze i destruktorze
18:55 <@Vengeance> tworzac nowy obiekt
18:55 <@Vengeance> $obj = new Obiekt();
18:56 <@Vengeance> wywolywany jest jego konstruktor
18:56 <@Vengeance> gdy zas obiekt kasujemy, np. poprzez unset($obj) lub po zakonczeniu dzialania skryptu (php sam usuwa obiekty... sprzata po nas)
18:56 <@Vengeance> wywolywany jest destruktor
18:56 <@Vengeance> sa ta (nie)zwykle metody
18:57 <@Vengeance> o odpowiedniej nazwie
18:57 <@Vengeance> konstruktor deklarujemy wiec tak:
18:57 <@Vengeance> public function __construct() {
18:57 <@Vengeance> }
18:57 <@Vengeance> destruktor zas
18:57 <@Vengeance> public function __destrutor() {
18:57 <@Vengeance> }
18:58 <@Vengeance> jak widzimy
18:58 <@Vengeance> skoro sa to metody
18:58 <@Vengeance> to i argumenty mozna im przekazywac...
18:58 <@Vengeance> zauwazcie tez
18:58 <@Vengeance> ze podczas
18:58 <@Vengeance> $obj = new Obiekt();
18:58 <@Vengeance> pojawiaja sie nawiasy...
18:58 <@Vengeance> prawie tak jak podczas wywolania funkcji
18:59 <@Vengeance> napiszmy wiec przykladowy kod, tak sie najszybciej czlowiek uczy
19:01 <@Vengeance> http://phpfi.com/81000
19:01 <@Vengeance> widzimy wiec, ze poza zapisem w stylu
19:01 <@Vengeance> $czlowiek->imie = 'Michal';
19:01 <@Vengeance> jak to robilem wczesniej
19:01 <@Vengeance> mozemy uzywac konstruktora wraz z argumentami do niego przekazywanymi
19:02 <@Vengeance> teraz takze nalezy wspomniec
19:02 <@Vengeance> iz standardowa zawartosc dla argumentu mozemy przypisac JUZ podczas definiowania klasy
19:02 <@Vengeance> np.
19:02 <@Vengeance> class Czlowiek {
19:02 <@Vengeance> public $plec = 'mezczyzna';
19:02 <@Vengeance> }
19:03 <@Vengeance> teraz kazdy obiekt klasy Czlowiek bedzie miec argument $plec z wartoscia standardowa 'mezczyzna'
19:03 <@Vengeance> dopoki tego nie zmienimy my np. na 'kobieta';
19:03 <@Vengeance> jasne?
19:03 < jaro3000> jak slonce :-P
19:03 < kamikaze> yhy :)
19:03 < Astarot> jasne ;)
19:04 < kamikaze> chyba niewielu słuchaczy dzisiaj
19:04 <@Vengeance> a moze spytam... kto nie mial wczesniej doczynienia z OOP
19:04 <@Vengeance> przynajmniej w PHP
19:04 < jaro3000> ja
19:04 < Reqamst> ja
19:04 < jaro3000> tj. mialem do czynienia z OOP baaardzo duzo
19:04 <@Vengeance> Regedit: rozumiesz jak dotad?
19:04 < jaro3000> ale nigdy w PHP :-)
19:04 < Astarot> ja troszeczke probowalem pisac OOP ;p
19:04 < r00uter> teraz jest wyklad ?
19:04 < jaro3000> r00uter: tak
19:04 <@Gynvael> r00uter: tak
19:05 < r00uter> to nie przeszkadzam
19:05 <@Vengeance> jedzmy dalej...
19:05 <@Vengeance> wrocmy sie do przykladu z rowerem i kierownica ;]
19:05 <@Vengeance> pamietacie jak stworzylismy tam kolejna klase
19:05 <@Vengeance> KierownicaZa150zl()
19:06 <@Vengeance> miala ona miec pewne odmienne wlasciwosci od standardowej kierownicy
19:06 <@Vengeance> Jezeli ktos jest kumaty... pomysli czemu nie stworzylismy po prostu
19:06 <@Vengeance> obiektu Kierownica
19:06 <@Vengeance> i nie zmienilismy standardowych wartosci argumentow np
19:06 <@Vengeance> $kierownica->szybkoscSkretu += 20;
19:07 <@Vengeance> $rower->kierownica = $kierownica;
19:07 <@Vengeance> otoz moglismy tak zrobic... i tak powinno sie robic
19:07 <@Vengeance> DOPOKI
19:07 <@Vengeance> nie wprowadzamy jakies nowej funkcjonalnosci!
19:07 <@Vengeance> przyjmijmy ze nasza super kierownica za 150zl jest amortyzowana
19:07 <@Vengeance> wiec dochodzi nam metoda UgnijSie()
19:08 <@Vengeance> oraz argument
19:08 <@Vengeance> public $wysokoscUgiecia;
19:08 <@Vengeance> (ps. ale rotflowy przyklad ;])
19:08 <@Vengeance> nasza standardowa kierownica nie ma az takich bajerow... dlatego nie wystarczylo jedynie zmienienie argumentow
19:09 <@Vengeance> trzeba bylo nam stworzyc nowa klase
19:09 <@Vengeance> i tutaj nachodzi nas refleksja...
19:09 <@Vengeance> no tak, tworzymy nowa klase
19:09 <@Vengeance> ale wszystkie poprzednie metody
19:09 <@Vengeance> wLewo(), wPrawo(), naWprost() trzeba przepisac na nowo :/
19:09 <@Vengeance> gdzie tu ta elastycznosc :/
19:09 <@Vengeance> otoz do tego wlasnie sluzy dziedziczenie by ta elastycznosc byla :D
19:09 <@Vengeance> nazwa "dziedziczenie" nie wziela sie przypadkowo
19:10 <@Vengeance> gdyz dziala to dokladnie na takiej zasadzie
19:10 <@Vengeance> jak to z naszymi ojcami matkami dziadkami itd :D
19:10 <@Vengeance> Gdy klasa A dziedziczy z klasy B
19:10 <@Vengeance> posiada wszystkie argumenty i metody klasy B
19:10 <@Vengeance> a dodatkowo moze posiadac cos wlasnego...
19:10 <@Vengeance> w PHP zaimplementujemy to tak:
19:11 <@Vengeance> class KierownicaZa150zl extends Kierownica
19:11 <@Vengeance> {
19:11 <@Vengeance> public $wysokoscUgiecia;
19:11 <@Vengeance> public function UgnijSie() { ... }
19:11 <@Vengeance> }
19:11 <@Vengeance> tak wiec mamy juz nasza coolerska kierownice
19:11 <@Vengeance> z amrotyzacja...
19:11 <@Vengeance> dodatkowo nie musimy przepisywac metod standardowej kierownicy...
19:11 <@Vengeance> dzieki "extends"
19:12 <@Vengeance> dziedziczymy wszystkie argumenty i metody klasy Kierownica
19:12 <@Vengeance> (klasa KieroniwcaZa150zl to dziecko a klasa Kierownica to rodzic)
19:13 <@Vengeance> logiczne? :]
19:13 * Vengeance jedzie na spontanie, takze wiecie ;]
19:13 < Astarot> yeah
19:13 <@Vengeance> jaro3000: pytal
19:13 < Astarot> ;(
19:13 <@Vengeance> o przeciazanie konstruktora
19:13 <@Vengeance> zaraz o tym powiem ;]
19:14 <@Vengeance> wiemy juz ze klasa A moze dziedziczyc z klasy B
19:14 <@Vengeance> oraz ze moze dodawac jakies nowe mozliwosci...
19:14 <@Vengeance> a czy moze nadpisywac poprzednie? (te z klasy B)?
19:14 <@Vengeance> oczywiscie
19:14 <@Vengeance> przyjmijmy, ze nasza kierownica
19:14 <@Vengeance> ma amrotyzacje
19:14 <@Vengeance> oraz zupelnie innowacyjny system jej prostowania.
19:15 <@Vengeance> Zato proces skrecania w lewo i prawo odbywa sie tak samo jak w przypadku standardowej kierownicy
19:15 <@Vengeance> znow wiec bedziemym mieli
19:15 <@Vengeance> class KierownicaZa150zl extends Kierownica {
19:15 <@Vengeance> znow deklaracja argumentow i metod unikalnych dla tejze kierownicy...
19:16 <@Vengeance> ale jak nadpisac metode naWprost() ktora przeciez odziedziczylismy z klasy B ?
19:16 <@Vengeance> wystarczy ja napisac na nowo
19:16 <@Vengeance> tak wiec piszemy:
19:16 <@Vengeance> public function naWprost($moze, $jakies, $argumenty) {
19:16 <@Vengeance> // tu wykonujemy to co potrzeba...
19:16 <@Vengeance> }
19:17 <@Vengeance> moze sie zdazyc ze w przypadku nadpisania metody potrzebujemy jednak uruchomic to co oferowala klasa rodzica
19:19 <@Vengeance> w tym wypadku
19:19 <@Vengeance> robimy taki myk:
19:21 <@Vengeance> http://phpfi.com/81001
19:21 <@Vengeance> class KierownicaZa150zl
19:21 <@Vengeance> {
19:21 <@Vengeance> public $wysokoscUgiecia;
19:21 <@Vengeance>
19:21 <@Vengeance> public function ugnijSie() { }
19:21 <@Vengeance>
19:21 <@Vengeance> public function naWprost()
19:21 <@Vengeance> {
19:21 <@Vengeance> echo 'cos od siebie';
19:21 <@Vengeance> parent::naWprost();
19:21 <@Vengeance> echo 'lalae';
19:21 <@Vengeance> }
19:21 <@Vengeance> Tak wiec linijka
19:21 <@Vengeance> parent::naWprost();
19:21 <@Vengeance> wywoluje metode naWprost(); w klasie rodzica
19:22 <@Vengeance> przypominam, ze w obrebie danej klasy
19:22 <@Vengeance> odwolujemy sie poprzez
19:22 <@Vengeance> $this->
19:22 <@Vengeance> $this->argument;
19:22 <@Vengeance> $this->metoda();
19:22 <@Vengeance> jaro3000:
19:22 <@Vengeance> by przeciazyc konstruktor
19:22 <@Vengeance> tez robic po prostu
19:23 <@Vengeance> public function __construct()
19:23 <@Vengeance> w klasie dziecka...
19:23 < jaro3000> ok, juz kumam :-)
19:23 <@Vengeance> i takze mozesz zrobic
19:23 <@Vengeance> parent::__construct();
19:23 < jaro3000> znam "mniej wiecej" OOP, takze chodzilo mi raczej o kwestie jak to wykonac w tym jezyku :-)
19:23 <@Vengeance> zauwazyliscie wiec
19:23 <@Vengeance> juz pewnie
19:24 <@Vengeance> ze do danego argumentu/metody klasy
19:24 <@Vengeance> mozemy odwolac sie na 3 sposoby
19:24 <@Vengeance> 1. z zewnatrz... w skrypcie piszemy $obiekt->argument;
19:24 <@Vengeance> 2. z wewnatrz... w skrypcie piszemy $this->argument;
19:24 <@Vengeance> 3. z klasy dziecka do klasy rodzica... poprzez parent::argument;
19:25 <@Vengeance> w zwiazku z ztym
19:25 <@Vengeance> powiazane sa te slowka
19:25 <@Vengeance> "public"
19:25 <@Vengeance> ktore kazdorazowo wpisuje przed deklaracje metody/argumentu
19:26 <@Vengeance> *weszlo to od php5. w php4 argumenty/metody deklarowalsimy tak:
19:26 <@Vengeance> http://phpfi.com/81004
19:26 <@Vengeance> slowka te (public / private / protected)
19:26 <@Vengeance> sluza do okreslenia zasiegu danego argumentu / metody
19:27 <@Vengeance> *w programowaniu strukturalnym np. bylo cos takiego jak zasieg zmiennej, prawda? :]
19:27 <@Vengeance> tak wiec :
19:27 <@Vengeance> 1. public - dostep wszystkimi mozliwimy sposobami - z zewnatrz, z wewnatrz i z klasy dziecka
19:27 <@Vengeance> 2. protected - dostep wylacznie z wewnatrz i z klasy dziecka - dostep z zewnatrz jest niemozliwy (powoduje blad)
19:28 <@Vengeance> 3. private - dostep jedynie z wnetrza klasy
19:28 <@Vengeance> tak wiec
19:28 <@Vengeance> public function UgnijSie() { }
19:28 <@Vengeance> protected function UgnijSie() { }
19:28 <@Vengeance> private function UgnijSie() { }
19:28 <@Vengeance> czy tez:
19:28 <@Vengeance> public $wysokoscUgiecia;
19:28 <@Vengeance> protected $wysokoscUgiecia;
19:28 <@Vengeance> private $wysokoscUgiecia;
19:29 <@Vengeance> okreslaja nam skad bedziemy mieli dostep do danych klasy
19:29 <@Vengeance> no bo przeciez skoro kod ma byc hermetyczny (udostepniac tylko odpowiednie metody ew. argumenty) to nie mozemy wystawiac publicznie jakis argumentow czy metod pomocniczych.
19:30 <@Vengeance> Tak ogolnie wszystkie te metody dostepne w klasie(obiekcie) z zewnatrz nazywane sa potocznie API czy tez Interfejsem... wszystko inne co w klasie sie znajduje jest niewazne z puntu "wyzszych warstw aplikacji" bo po prostu nie maja tam dostepu
19:31 <@Vengeance> pytania?
19:31 < driud> widocznie wszystko dobrze opisales
19:31 < driud> :)
19:31 < Karql> chcesz winogrona? podziele sie:D
19:31 < kamikaze> bed± dzis wyjatki?
19:31 * Vengeance mysli raczej co tu jeszcze opowiedziec... by nie wybrac za daleko z tematem... bo moga byc problemy
19:32 <@Vengeance> kamikaze: raczej nie myslalem o tym...
19:32 <@Vengeance> ale mozna sie zastanowic ;]
19:32 < kamikaze> ok, to moze na inny wyklad
19:32 < Heretic> juz po wykladach ... ?
19:32 <@Vengeance> Zrobie krotkie podsumowanie moze :]
19:33 <@Vengeance> To czy bedziecie pisac obiektowo czy nie, nie zalezy od tego czy uzycjecie klas i obiektow w skrypcie
19:33 <@Vengeance> pisanie obiektowe to pisanie zgodnie z zasadami o ktorych wspominalem
19:34 <@Vengeance> jezeli nie bedziecie trzymac sie tego ze klasa ma byc mozliwie nie podzielna jednostka (oczywiscie z rozmyslem)
19:34 <@Vengeance> i zrobicie z klas pojemniki na funkcje roznego rodzaju, robiacych rozne rodzaje operacji... nici z OOP
19:34 <@Vengeance> czesto widze ze ludzie nawet niezle zaczynaja rozumiec OOP... ale np. zapominaja zupelnie o argumentach(polach) klas
19:34 <@Vengeance> w ogole ich nie uzywaja
19:34 <@Vengeance> gdy macie rozwiazac jakis problem
19:35 <@Vengeance> pomyslcie najpierw
19:35 <@Vengeance> na jakie obiekty moze zostac on podzielony
19:35 <@Vengeance> Jezeli stoicie przed napisanie systemu newsow
19:35 <@Vengeance> od razu wiadomo ze potrzebny bedize obiekt "News"
19:36 <@Vengeance> przyda sie takze cos co trzyma wszystkie newsy (przynajmniej w teorii)... np. KontenerNaNewsy
19:36 <@Vengeance> News zawiera odpowiednie argumenty czy metody formatowania tresci newsa...
19:36 <@Vengeance> Kontener pozwala na pobranie danego newsa (przez wskazanie ID)
19:36 <@Vengeance> zauwazcie ze gdy wywolujemy
19:37 <@Vengeance> $news = $kontenet->PobierzNewsID(4);
19:37 <@Vengeance> jako wynik powinnismy otrzymywac obiekt News!
19:37 <@Vengeance> teraz mozemy zrobic bez problemu
19:37 <@Vengeance> echo $news->title;
19:38 < kamikaze> mam pyt
19:38 <@Vengeance> nom
19:38 < kamikaze> mozna definiowac funkcje klasy na zewnatrz ciala klasy jak w c++ ?
19:38 <@Vengeance> nie
19:38 < kamikaze> szkoda
19:38 < kamikaze> :)
19:38 <@Vengeance> bo ja wiem
19:38 <@Vengeance> nie wazne :]
19:39 < kamikaze> w sumie to można inaczej załatwic
19:39 < kamikaze> moznaby chyba zrobić funkcje da kasy w pliku i includowac go w ciało klasy?
19:39 < kamikaze> tylko czy to dobry poysl
19:39 <@Vengeance> ale po co
19:39 <@Vengeance> pozatym nie da sie
19:39 <@Vengeance> ;]
19:39 < mosquito> [;
19:39 <@Vengeance> Sadze ze to tyle ile moglem na start przekazac prostym jezykiem. Jezeli lubicie czytac naukowe teksty itd to w necie jest sporo artow o OOP.
19:40 < jaro3000> brawo brawo brawo dla Vengeance
19:40 < Sumik> oj, spoznilem sie ;P
19:40 < kamikaze> no brawo
19:40 <@Vengeance> nie wiedzialem kto bedzie sluchal wiec nie chcialem przesadzac z pojeciami itp....
19:40 <@Vengeance> jezeli zas chodzi o wyjatki:
19:40 <@Vengeance> wyjatki to nowy rodzaj obslugi bledow w php5
19:40 <@phoenix__> Sumik: logi beda
19:40 <@Vengeance> wyjatkiem jest kazda klasa dziedziczaca po Exception
19:40 <@phoenix__> Sumik: wyklady.vexillium.org
19:40 <@Vengeance> czyli np.
19:41 <@Vengeance> class MojWyjatek extends Exception
19:41 <@phoenix__> Sumik: dzisiaj wieczorem albo jutro
19:41 <@Vengeance> teraz by rzucic wyjatek uzywamy slowka "throw" oraz tworzymy jednoczesnie nowy obiekt Exception...czyli:
19:41 <@Vengeance> throw new MojWyjatek('komunikat');
19:41 < Sumik> phoenix__ : ok , thnx.
19:41 <@Vengeance> teraz by zlapac wyjatek
19:41 <@Vengeance> piszemy
19:42 <@phoenix__> Sumik: eee ja cie z kads znam chyba ;]
19:42 <@phoenix__> Sumik: ale nvm
19:42 <@phoenix__> Vengeance: kiedy skonczysz?
19:42 <@Vengeance> try
19:42 <@Vengeance> {
19:42 <@Vengeance> ... tu kod ktory moze rzucic wyjatek...
19:42 <@Vengeance> } catch(MojWyjatek $e) {
19:42 <@Vengeance> ... tu co robimy z wyjatkiem ...
19:42 <@Vengeance> echo $e->GetMessage();
19:42 <@Vengeance> }
19:42 <@Vengeance> phoenix__: chyba juz skaczylem ;] teraz to juz odpisuje na pytanka ludzi
19:43 < jaro3000> Vengeance: jakie metody sa dziedziczone po Exception ?
19:43 < jaro3000> domyslnie ?
19:43 <@Vengeance> o tym w php.net/Exceptions bodajrze ;]
19:43 < jaro3000> ok :-)
19:43 <@Vengeance> bloki catch() pozwalaja nam na lapanie roznych wyjatkow (roznych
19:43 <@Vengeance> klas)
19:43 < jaro3000> jak z RTTI jest i downcastowaniem obiektu ?
19:43 <@Vengeance> jesli wiec zrobimy
19:44 < kamikaze> RTTI?
19:44 < jaro3000> RunTime Type Information
19:44 <@Vengeance> http://phpfi.com/81009
19:45 <@Vengeance> mozemy okreslic rozne zachowania aplikacji w reakcji na rozne typy wyjatkow
19:45 <@Vengeance> w tym przykladzie wykona sie tylko kod z drugiego bloku catch {}
19:45 <@Vengeance> bo wyjatek jest typu "Exception" a nie "MojWyjatek"
19:45 < kiero> http://rafb.net/paste/ << latwo takie cos napisac w PHP? i czy byla by potrzebna MySQL base
19:45 <@Vengeance> kamikaze: styknie ?
19:46 <@Vengeance> keidii: mysql nie, i latwo ;]
19:46 < kamikaze> Vengeance: jasne :)
19:46 < kamikaze> dzieki
19:46 < jaro3000> a jak throwniesz MojWyjatek ( ktory takze jest Exception przeciez ) to sie naturalnie wywola kod z obu blokow
19:46 <@phoenix__> kiero: mozna zrobic na MySQl, na plikach
19:46 < jaro3000> da ?
19:46 < kiero> Vengeance: jakby co to kiero jestem :P
19:46 <@Vengeance> Kto zrobi wyklad o Zerowym, pierwszym, drugim i trzecim okresie warunkowym ? :D
19:46 <@Vengeance> jaro3000: nie...
19:47 < kamikaze> ;)
19:47 <@Vengeance> wywola sie blok dla MojException
19:47 <@Vengeance> tyle ze jest tak:
19:47 <@Vengeance> jezeli bedzie istnial blok dla Exception
19:47 <@Vengeance> wylacznie
19:47 <@Vengeance> a ty throwniesz jakis wyjatek dziedziczacy po nim
19:47 <@Vengeance> to go zlapie...
19:47 <@Vengeance> tak jakby wyjatki sa lapane zgodnie z drzewem dziedziczenia
19:48 <@Vengeance> rozumiesz? :]
19:48 < jaro3000> troszke dziwne rozwiazanie, ale rozumiem :-)
19:48 <@Vengeance> kto to chcial roznie w php4/php5 ?
19:48 < kamikaze> a mozna dziedziczyć po klasie która dziedziczy po innej klasie?
19:48 < jaro3000> to mnie malo interesuje
19:48 < jaro3000> kamikaze: raczej tak :-P
19:48 < kamikaze> ok
19:48 <@Vengeance> kamikaze: tak
19:48 < kiero> : czy sa juz jakies funkcje w PHP co koloruja skladnie danego jezyka? a jesli sa to jakie jezyki koloruje?
19:48 <@Vengeance> a co do wczesniejszego pytania... kogos... czy obiekt
19:49 < kiero> Vengeance: czy sa juz jakies funkcje w PHP co koloruja skladnie danego jezyka? a jesli sa to jakie jezyki koloruje?
19:49 <@Vengeance> moze deklarowac dwie rozne klasy
19:49 <@Vengeance> to NIE, ale moze byc implemetacja jednej klasy
19:49 < jaro3000> Vengeance: jest wielodziedziczenie wlasnie ?
19:49 <@Vengeance> i wielu interfejsow
19:49 <@phoenix__> kiero: mozna str_replace i tam zamieniac chociaz czy ja wiem czy tak sie oplaca
19:49 < jaro3000> Vengeance: a wielodziedziczenie z 2 klas ( nie interfejsow ) ?
19:49 <@Vengeance> nie ma
19:49 < jaro3000> ok
19:49 <@phoenix__> Vengeance: odpowiedz na pytanie kiero tez jestem ciekaw odpowiedzi
19:49 <@Vengeance> jedna klasa... wiele interfejsow
19:49 <@Vengeance> interfejs to takie cos...
19:50 <@Vengeance> co tylko mowi o tym
19:50 <@Vengeance> jakie sa argumenty i metody
19:50 < jaro3000> wiem :-)
19:50 <@Vengeance> zas metod tych nie da sie oprogramowac (wypelnic kodem)
19:50 < jaro3000> ale mow, moze inni nie wiedza :-)
19:50 <@Vengeance> w klasie mozemy tego dokonca :]
19:50 <@phoenix__> Vengeance: jak zrobic zeby w php kolorowalo skadnie danego jezyka ?????????????
19:50 <@Vengeance> jaro3000: poto mowie
19:50 < jaro3000> jeszcze cos chcialem, ale mi ucieklo
19:50 <@Vengeance> phoenix__: modul GaSHi do phpBB
19:50 <@Vengeance> w sumie to juz jest oddzielna biblioteka
19:50 <@Vengeance> pozatym
19:50 <@Vengeance> show_source()
19:51 <@Vengeance> highlight_string()
19:51 <@Vengeance> to takie wbudowane w PHP
19:51 < Nome> elo all!
19:51 <@Vengeance> a GaSHi wspiera 44 jezyki chyba
19:51 <@phoenix__> show_source() co robi ? :>
19:51 < crook> witam
19:51 < fgfd> po wykladzie
19:51 <@phoenix__> hi
19:51 < Nome> mam pytanko.: co mnie ominelo?
19:51 < fgfd> fajny był??
19:51 <@Vengeance> show_source('plik.php')l
19:51 < jaro3000> fgfd: ano :-)
19:51 <@phoenix__> aha
19:51 <@Vengeance> zrobi ci echo zawartosci pliku
19:51 <@phoenix__> czyli zrodlo pliku
19:51 <@Vengeance> juz pokolorowanego
19:51 <@Vengeance> php.net
19:51 <@phoenix__> aha
19:52 <@Vengeance> php.net/
19:52 <@Vengeance> ;]
19:52 <@phoenix__> czyli to koloruje skladnie ? :>
19:52 <@Vengeance> sorry
19:52 <@Vengeance> biblioteka nazywa sie GeSHi
19:52 <@Vengeance> http://qbnz.com/highlighter/
19:52 < crook> vengeance ten wyklad byl o OOP-ie w php5?
19:52 <@Vengeance> phoenix__: http://pl2.php.net/show_source
19:52 <@Vengeance> http://pl2.php.net/highlight_string
19:52 <@Vengeance> crook: tak po czesci
19:53 < crook> ale podstawy?
19:53 < fgfd> dajta log na strone
19:53 < Nome> jaki material mnie ominal, bo bylem na Judo?
19:53 <@Vengeance> tutaj nowosci w php5: http://pornel.net/php5
19:53 < crook> czy bardziej szczegolowo?
19:53 <@Vengeance> crook: raczej teoria... prostym jezykiem...
19:53 <@Vengeance> nawet nic nie wspomnialem o klasach statycznych chocby
19:53 < crook> a zrobisz taki bardziej szczegolowy wyklad?
19:54 <@Vengeance> bo dzisiejszym... stwierdzilem chyba ze sie nie nadaje ;P
19:54 < crook> czemuz to?
19:54 <@Vengeance> zreszta... strukture jezyka to masz na php.net i innych
19:54 <@Vengeance> czym innym jest zrozumienie zasad tworzenia kodu OOP :/
19:54 <@Vengeance> ciezko to jest przekazac, ale wlasnie dzis sie staralem chociaz troche
19:55 < kiero> Vengeance: wiec co z kolorowaniem tych skladni?
19:55 <@Vengeance> juz odpowiedzialem
19:55 <@Vengeance> ze 3 razy
19:55 <@Vengeance> na 4 rozne sposoby
19:55 <@Vengeance> :]
19:55 <@Vengeance> Vengeance phoenix__: http://pl2.php.net/show_source
19:55 <@Vengeance> Vengeance http://pl2.php.net/highlight_string
19:55 <@Vengeance> Vengeance biblioteka nazywa sie GeSHi
19:55 <@Vengeance> Vengeance http://qbnz.com/highlighter/
19:56 < crook> jest jeszcze highlight_file
19:56 < kiero> Vengeance: a jakie jezyki koloryzuje?
19:56 < crook> ale nie wiem dokladnie jakie bylo pytanie :P
19:56 <@Vengeance> wejdz mzoe chociaz
19:56 <@Vengeance> na ta strone !
19:56 < kiero> ok my master [;
19:58 <@phoenix__> kupeee jezykow
19:58 < G0blin> re
19:58 < G0blin> daj mi ktos @ :]
19:59 < kiero> bo tworze cos podobnego do http://rafb.net/paste/ i przyda mi sie koloryzacja skladni [;
19:59 <@Vengeance> ok, jakies jeszcze moze pytania? albo prosby ;]
19:59 <@Vengeance> bo angielski czeka na mnie :(
20:00 <@G0blin> thx
20:01 <@phoenix__> a moze -o ?:>
20:01 <@phoenix__> G0blin: zdejmij mi opa
20:01 <@G0blin> ok
20:01 <@G0blin> jest bot? :>
20:01 < Karql> Vengeance: jak skonczysz to powiedz mi:D bo musze logi wyslac:D
20:01 <@G0blin> o lol.....
20:01 <@Vengeance> ok, jakby co to mozna mnie znalesc na www.strefaphp.net
20:01 <@G0blin> to wy jeszcze wyklad macie?
20:01 <@Vengeance> jest forum wiec pytac jakby cos :]
20:02 <@Vengeance> G0blin: hm, tez myslalem ze juz sie skaczyl :D
20:02 <@Vengeance> Karql: ok... wysylaj ;]
20:02 < Karql> spox
20:02 < Karql> :D
20:02 <@Vengeance> mozesz reklame sajta zostawic jeszcze :D a dalej utnij ;p