|
PHP PHP aplikacije, Smarty, PEAR |
|
Alati teme | Način prikaza |
14. 11. 2008. | #1 |
novi član
Datum učlanjenja: 14.11.2008
Poruke: 4
Hvala: 0
0 "Hvala" u 0 poruka
|
static promenljiva koja drzi mysql resource, da ili ne?
Zelim da napisem neku svoju klasu za rad sa bazom, kao deo tronivojske arhitekture, i sad gledao sam dosta koda i knjiga i uglavnom se atribut klase koji drzi mysql resource (tj. rezultat mysql_connect funkcije) definise kao static.
Nije mi bas najjasnije zasto? Zelim da otvorim vezu ka bazi kada hocu da izvrsim neki upit i odmah ga zatvaram. Naime, ako u konstruktoru te svoje klase otvorim vezu ka bazi, a destruktoru klase zatvaram i kada koristim objekat te klase mi se pri samoj inicijalizaciji otvori veza, pa onda pozovem neku metodu da izvrsim upit i onda unistim taj objekat, ne kapiram zasto bi mi taj atribut bio static? Kapiram, ako je static, onda bi on, jednom kreiran postojao sve dok sam ne nestane na timeout u mysql-u? uopste koja je poenta? da li ce on, ako je static biti na raspolaganju vise korisnika? |
14. 11. 2008. | #2 |
Super Moderator
Invented the damn thing
Datum učlanjenja: 06.06.2005
Poruke: 2.371
Hvala: 370
701 "Hvala" u 194 poruka
|
Static promenljiva je zajednicka za sve instance jedne klase, tako da apsolutno ima smisla da promenljiva koja drzi mysql konekciju bude static. Posmatraj static promenljive recimo kao prezime svih clanova jedne porodice. Npr pera, mika i laza sharuju isto prezime petrovic i to je static promenljiva.
E sad sto se stvarnog zivota tice, ja uglavnom u svojim klasama kreiram instancu konekcije van neke klase koja je koristi i istu prosledjujem kroz konstruktor. Primer, mysql klasa koja je preuzeta od Harrya Fuecksa (ona je php4, za php5 koristi MySQLi klasu koja ima slicnu funkcionalnost): PHP kôd:
PHP kôd:
PHP kôd:
Nadam se da sam bio od pomoci Poslednja izmena od dinke : 14. 11. 2008. u 13:38. |
14. 11. 2008. | #3 |
Ivan Pavković
Qualified
Datum učlanjenja: 15.01.2007
Lokacija: Beograd
Poruke: 144
Hvala: 42
16 "Hvala" u 16 poruka
|
Evo da probam da dam svoje vidjenje toga.
Pre svega, ne moras toliko da se opterecujes zatvarnjem konekcije ka bazi. Konekcija ce biti zatvorena kada se skripta izvrsi, tako da nije neophodno da o tome vodis racuna. Ja licno ne zatvaram konekciju ka bazi nikad, pustam PHP engine da vodi racuna o tome. Zasto static? Kada definises neki propery kao static, to znaci da ce on biti deljen izmedju svih instanci te klase, sto je klasu koju ti hoces svakako pozeljno. Dodao bih jos da je za db klasu veoma pozeljno koristiti singleton pattern koji ce ti omoguciti da uvek imas jednu i samo jednu instancu iste klase. |
14. 11. 2008. | #4 |
Goran Pilipović
Sir Write-a-Lot
|
I ja sam jedno vreme tako radio, osim sto sam prenosio $db kao referencu, a onda sam napravio pure static klasu DB i umesto
$result = $this->db->fetch (...) sada uvek radim $result = DB::fetch(...) Jednostavno ne vidim nikakvu potrebu da postoji $this->db u svakom objektu, to su sve bila nasledja iz starih vremena php4 (pa cak i php3) A sto se tice static promenljive koja drzi mysql resource... iskreno ne znam zasto to tako "treba", jer nikada do sada nisam imapo potrebu da pristupam varijabli (mysql resource) koju mysql vraca... uvek mi trebaju samo rezultati, a moja DB klasa brine o tome, pa kada uraidm fetch() vraca rezultate a ne resource. Taj resource je potreban samo interno u toj klasi, a posto je i klasa static, sigurno se nece inicijalizovati 20 puta.
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
14. 11. 2008. | #5 |
Ivan Dilber
Sir Write-a-Lot
|
problem sa static promenjivom je sto u jednom trenutku pozelis da se zakacis na 2 baze odjednom (load balancing ili sta vec), a ako konekciju cuvas kao static to ne mozes jednostavno izvesti... cim je promenis u jednoj instanci, menjas je svugde..
zato ja preferiram da mi svaka instanca ima svoju referencu na DB link, a php driveri su tako napravljeni da ce koristiti postojece konekcije ako mogu, tako da je prakticna razlika samo u jednom integeru vise po klasi sto je beznacajno u odnosu na dodatnu flexibilnost u radu sa vise baza...
__________________
Leadership is the art of getting people to want to do what you know must be done. |
14. 11. 2008. | #6 | |
novi član
Datum učlanjenja: 14.11.2008
Poruke: 4
Hvala: 0
0 "Hvala" u 0 poruka
|
Citat:
ja kapiram sta znaci static, ali me buni jedna druga stvar. nadam se da pitanje nije previse glupo znaci ako je static ta klasa ili, svjedno, link ka bazi, da li onda jednom kada se taj link kreira on vazi za mene koji sam pokrenuo ceo taj skript, i nekog drugog ko je dosao na sajt i isto tako pokrenuo taj skript ili svako ima svoj primerak? |
|
14. 11. 2008. | #7 |
133t
Master
|
svako svoj primerak.
|
15. 11. 2008. | #8 |
Ivan Dilber
Sir Write-a-Lot
|
u PHP-u svaki poziv skripte ima svoj proces koji je potpuno nezavistan od svega ostalog. Znaci cela prica o static variablama se odnosi samo na stvari unutar tog procesa, a svaki proces ce imati zasebnu kopiju svih varijabli, klasa i svega ostalog.
U nekim drugim jezicima/okruzenjima je to drugacije reseno, ovde je tako... Inace moja DB klasa koju sam pominjao nema nista staticko, radi sa najobicnijim php4 klasama, vrlo jednostavan OOP. Napravis instancu klase sa new, i to je jedna konekcija na jednu bazu. Onda mozes da napravis drugu konekciju i ona moze da bude vezana na skroz drugu bazu, metode su iste, ali svaka instanca zna svoj link na bazu, i to je cela mudrost.
__________________
Leadership is the art of getting people to want to do what you know must be done. Poslednja izmena od ivanhoe : 15. 11. 2008. u 05:02. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Koja banka za preduzetnika? | mLAN | e-Business | 68 | 02. 02. 2011. 12:22 |
Promenljiva u html formi | chandler | Sva početnička pitanja | 2 | 30. 01. 2009. 11:21 |
da li floatujete ili pozicionirate (static/relative) | darche | Sva početnička pitanja | 19 | 25. 10. 2007. 01:11 |
Globalna promenljiva uz prototype framework | LiquidBrain | (X)HTML, JavaScript, DHTML, XML, CSS | 7 | 23. 08. 2007. 15:24 |
Web-Dev Resource | Br@nkoR | Linkovi | 5 | 09. 06. 2005. 23:58 |