[klasy] ktoś to używa?
[klasy] ktoś to używa?
jestem juz średnio zaawansowanym koderem php, a przyznam sie, że niogdy nei użyłem zadnej klasy. Czytałem tekscik o klasach na tej stronie - ale mowiac prawde nei zrozumialem na czym polega ich funkcjonalnosc.
Mozecie mi wyjasnic, na chlopskich przykladach, jak pisac klasy, i dlaczego w ogole warto pisac klasy?
A moze nie warto?
Mozecie mi wyjasnic, na chlopskich przykladach, jak pisac klasy, i dlaczego w ogole warto pisac klasy?
A moze nie warto?
Re: [klasy] ktoś to używa?
Clasy w PHP to taka prymitywna obiektowosc. Owszem jak niechce nie musisz. Ale w klasach mozesz sobie wygodnie grupowac funkcje do klasy kalkulator funckje zwianzane z liczniem na ten przykład. Bardzo to pomaga przy dużych projektach i pozwala nad nimi łatwiej zapanować... Przykłady niech poda ktoś inny bo ja nie wiele już pamiętam 
Re: [klasy] ktoś to używa?
Jeżeli sładujesz dane w XML-u i masz uniwersalny format, który pozwala ci zapamiętać wszystko, np:[xml]<entry id="( wartość z uniqid() )"><param name="( coś tam )">( wartosć parama )</param><param (....)> (........) </param>(........)</entry>[/xml]itd. to robisz kasę do obsługi tego formatu, która ma np. takie metody:[php]<?php
$db->load($filename);
$db->save();
$db->listentry(); //zwraca id-ki wszystkich entry z db
$db->set($entry,$param,$value);
$db->get($entry,$param);
$db->listparam($entry); //zwraca name-y wszystkich param-ów z $entry
?>[/php]Możesz teraz mieć w jednym skrypcie mnóóóstwo otwartych baz danych i masz zapewnioną wygodną obsługę. Co więcej: Możesz tworzyć klasy pochodne od klasy XMLDB, np klasę News:[php]<?php
$news->load($filename); //metoda odziedziczona!
$news->save(); //metoda odziedziczona!
$news->get($time); //zwraca pięć newsów wstecz od $time od razu sformatonane, do zaechowania na stronę.
$news->add($author,$title,$content); //dodaje newsa do db
?>[/php] Oczywiście - możnaby to robić na funkcjach i przekazywać im parametr $db. Czym właściwie różnią się takie podejścia? niczym! Wezmę jako przykład C/C++. Podczas komplikacji kodu C++ powstaje najpierw kod C i z niego dopiero powstaje kod assemblera, który po assemblacji daje plik wynikowy (najczęściej a.out, lub ELF
). Dzięki temu można stwierdzić jak wygląda implementacja obiektowości. A wygląda prymitywnie: zmienne klasy są pakowane do struktury, nazwy metod są lekko transformowane i do listy argumentów na pierwsze miejsce dodaje się wskaźnik do struktury! Programiści C wymyślili to już baaaardzo dawno temu, a praktyczne zastosowanie możemy znaleźć np. w kodzie Linuxa.(patrz -> struct file_operations). Cała kontrola dostępu do danych jest realizowana na poziomie parsera! tzn. jak ów widzi, że ktoś się próbuje z zewnątrz odwołać do zmiennej prywatnej to wywala errora i już! użycie prostej arytmetyki wskaźników pozwala na całkowite ominięcie tego "zabezpieczenia". Za używaniem klas przemawia ich wygoda. Kiedy mamy np. uchwyt socketa to wygodniej jest pisać [php]<?php $socket->send("GET / HTTP/1.1\n"); ?>[/php] niż [php]<?php send($socket,"GET / HTTP/1.1\n"); ?>[/php]. Wynik i tak będzie ten sam. Widzimy tutaj dobitnie, że klasy są swoistą nakładką na rzeczywistość. Na ich niekożyść wpływa zdecydowany spadek wydajności spowodowany ich używaniem. Niestety, aby ogarnąć większe projekty ich użycie jest niezbędne.
$db->load($filename);
$db->save();
$db->listentry(); //zwraca id-ki wszystkich entry z db
$db->set($entry,$param,$value);
$db->get($entry,$param);
$db->listparam($entry); //zwraca name-y wszystkich param-ów z $entry
?>[/php]Możesz teraz mieć w jednym skrypcie mnóóóstwo otwartych baz danych i masz zapewnioną wygodną obsługę. Co więcej: Możesz tworzyć klasy pochodne od klasy XMLDB, np klasę News:[php]<?php
$news->load($filename); //metoda odziedziczona!
$news->save(); //metoda odziedziczona!
$news->get($time); //zwraca pięć newsów wstecz od $time od razu sformatonane, do zaechowania na stronę.
$news->add($author,$title,$content); //dodaje newsa do db
?>[/php] Oczywiście - możnaby to robić na funkcjach i przekazywać im parametr $db. Czym właściwie różnią się takie podejścia? niczym! Wezmę jako przykład C/C++. Podczas komplikacji kodu C++ powstaje najpierw kod C i z niego dopiero powstaje kod assemblera, który po assemblacji daje plik wynikowy (najczęściej a.out, lub ELF
Re: [klasy] ktoś to używa?
Wiktor, z Twojego postu powinno się artykuł zrobić...
Re: [klasy] ktoś to używa?
Ja piszę teraz swój CMS i moduły są klasami i dostosowanie modułu do innego CMSa trwa 5 minut
Klonowanie modułu 1 
Re: [klasy] ktoś to używa?
Jednym z dobrych przykładów na wykorzystanie klas jest skrypt forum invisionpower board 1.3 lub 2.0 - polecam, ponieważ to ciekawa lektura i wiele rzeczy można wywnioskować 
Re: [klasy] ktoś to używa?
a ja nie lubie klas
przynajmniej narazie pozniej chyba bede musial
warto
Zalezy do czego mialy by byc uzywane. Jesli piszecie proste skrypty to nie potrzeba wam. Ale jesli chcecie cos naprawde ciekawego napisac, to klasy sa pomocne.
1. Pomyslcie np. o identyfikacji obiektow. Ladujesz do takiej tablicy kilka obiektow i nie obchodzi was jak sa zbudowane, wiecie za to ze dla kazdy obsluguje metode get_signature, wiec jesli chcecie uzyskac sygnatury piszecie tylko:
foreach($objects as $obj) {
print $obj->get_signature;
}
A teraz wyobjazcie sobie to w jezyku proceduralnym:
foreach($objects as $obj) {
switch gettype($obj)...... i tyle case'ow ile mozecie miec typow
}
i co jest prostsze?
2. class Aaa extends Bbb {} to mozna zaimplementowac jako normalne array'e, ale teraz pomyslcie o wszystkich funkcjach rekursywnych ktore trzeba napisac, zeby znalezc szukana metode u jakiegos pradziadka funkcji
3. Czasem macie duzo obiektow - czy warto dla kazdego utrzymywac osobne funkcje? To juz nie jest $obj->value() i value($obj), bo jesli macie kilka obiektow, z ktorych chcecie uzyskac jakas wartosc ogolna, to trzeba napisac funkcje objA_value($obj1); objB_value($obj2); objC_value($obj3); A czemu nie po prostu $obj1->value(), $obj2->value(), $obj3->value ?
Chyba wystarczy tych powodow. Klasy sa uzyteczne, a czy potrzebne, to juz sprawa kazdego osobnego projektu.
1. Pomyslcie np. o identyfikacji obiektow. Ladujesz do takiej tablicy kilka obiektow i nie obchodzi was jak sa zbudowane, wiecie za to ze dla kazdy obsluguje metode get_signature, wiec jesli chcecie uzyskac sygnatury piszecie tylko:
foreach($objects as $obj) {
print $obj->get_signature;
}
A teraz wyobjazcie sobie to w jezyku proceduralnym:
foreach($objects as $obj) {
switch gettype($obj)...... i tyle case'ow ile mozecie miec typow
}
i co jest prostsze?
2. class Aaa extends Bbb {} to mozna zaimplementowac jako normalne array'e, ale teraz pomyslcie o wszystkich funkcjach rekursywnych ktore trzeba napisac, zeby znalezc szukana metode u jakiegos pradziadka funkcji
3. Czasem macie duzo obiektow - czy warto dla kazdego utrzymywac osobne funkcje? To juz nie jest $obj->value() i value($obj), bo jesli macie kilka obiektow, z ktorych chcecie uzyskac jakas wartosc ogolna, to trzeba napisac funkcje objA_value($obj1); objB_value($obj2); objC_value($obj3); A czemu nie po prostu $obj1->value(), $obj2->value(), $obj3->value ?
Chyba wystarczy tych powodow. Klasy sa uzyteczne, a czy potrzebne, to juz sprawa kazdego osobnego projektu.



