Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Class-e i rad sa klasama

[es] :: PHP :: Class-e i rad sa klasama

[ Pregleda: 2649 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Kostolcanin
Chicago

Član broj: 112592
Poruke: 1
*.dsl.chcgil.sbcglobal.net.

Sajt: www.kostolac.net


Profil

icon Class-e i rad sa klasama18.09.2006. u 18:36 - pre 214 meseci
Imam jedno jako pocetnicko i glupo pitanje ali svakako ko pita nije glup nego ne informisan.
Poceo sam da radim sa klasama i imam jedan ocito glup problem a to je da ne razumem najbolje kako zapravo funkcionisu klase i gde se podaci smestaju. (memorija privremeno ili dok traje instanca klase ili?)
Zapravo, klasu napravim i smestim podatke u nju ali imam problem kada trebam da ih pozovem. U slucaju da ih pozivam nakon smestanja onda nije problem ali ako ih pozovem iz sa strane onda mi ne radi pozivna funkcija. Dali trebam instancu klase novu kada napravim da obelezim nekako kao tipa new Korpa("proizvod") i kako bih pozvao bas tu instancu kasnije?
Pokusacu da objasnim malo bolje:
Ako postavim neku klasu tipa :

class Korpa {
var Proizvod;


// i dodam neke funkcije tipa add and show u okviru klase:
function add($proizvod){
$this->Proizvod=$proizvod;
}
function show(){
return $this->Proizvod;
}
}///kraj klase


Sada naprimer ako je prosledjena informacija da je korisnik izabrao neki proizvod lako se dodaje i iscitava podatak formiranjem nove instance klase :
If(isset($_GET['proizvod'])) {
MyKorpa= new Korpa;
$MyKorpa->add($_GET['proizvod']);
$vrednost=$MyKorpa->show();
print $vrednost; // bi mi vratilo podatak smesten u objekati to je ok radi.

Napomena: klasa mi se nalazi u fajlu class.korpa.php koju ukljucuje index.php preko koga se sve odvija i nakon bilo kog podatka koji se prosledi vraca se na $PHP_SELF odnosno index.php
Pitanje je :
1)Kako pozvati isti objekat smesten u klasu Korpa (var Proizvod) iz nekog drugog dela skripta posto je meni ocito da to radi samo nakon pravljenja nove instance: new Korpa.

2)Da li je greska u konstrukciji i klasa je vidljiva samo dok se skript ne izvrsi pa se ne moze pozvati jer je prazna kada se ponovo izvrsi ili je nesto drugo.
3)Ako jeste kaka bi bilo najbolje da se odradi organizacija skripta da bi klassa postojala?
4)Ili klasa ne radi kao sessija i ne moze da postoji isto toliko koliko i sessija vec samo dok je aktivna (kao sto bi bila i bilo koja druga funkcija?)
Ustvari: Gde je greska sta sam pogresno shvatio tu?
Hvala unapred na vremenu potrosenom ali bi vasa pomoc verovatno pomogla vecini koji ne razumeju ovo poglavlje .

Ko zna zna a ko ne zna pita onoga ko zna i svi funkcionisu ;)
 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Class-e i rad sa klasama19.09.2006. u 16:45 - pre 214 meseci
Citat:
1)Kako pozvati isti objekat smesten u klasu Korpa (var Proizvod) iz nekog drugog dela skripta posto je meni ocito da to radi samo nakon pravljenja nove instance: new Korpa.


ako MyKorpa=new Korpa radis unutar neke funkcije, onda je varijabla MyKorpa (koja je tip podatka Korpa) vidljiva samo unutar nje. radi toga, ili koristi kljucnu rijec global ili radi novu instancu izvan svih funkcija/klasa. (Naravno, uvijek prvo moras imati kreiranu instancu i nesto upisano u nju da bi to isto mogao i procitati [odakle god])

Citat:
2)Da li je greska u konstrukciji i klasa je vidljiva samo dok se skript ne izvrsi pa se ne moze pozvati jer je prazna kada se ponovo izvrsi ili je nesto drugo.


ovo nisam razumio bas, ali generalno da, klasa se sama po sebi ne moze pozvati pri ponovnom izvrsavanju skripte bez da napravis novu instancu. ako ti pak treba, recimo, da se zapamti sta je korisnik stavio u Korpa u proslom requestu pa na to da dodas ono sta odabere u tekucem requestu, onda sve dosadasnje odabire moras spremiti ili u temp tabelu u bazu ili koristi $_SESSION.

Citat:
3)Ako jeste kaka bi bilo najbolje da se odradi organizacija skripta da bi klassa postojala?



Citat:
4)Ili klasa ne radi kao sessija i ne moze da postoji isto toliko koliko i sessija vec samo dok je aktivna (kao sto bi bila i bilo koja druga funkcija?)


yess, klasa ne radi ko sessija. da bi sacuvao sve sto je do sad dodano u klasu, trebas koristit sessiju (vidi pod 2) ) ili beku tmp tabelu u bazi.
 
Odgovor na temu

dee_
domagoj horvat
zagreb

Član broj: 73648
Poruke: 98
195.29.5.*

Sajt: www.astro-art.net


Profil

icon Re: Class-e i rad sa klasama19.09.2006. u 16:56 - pre 214 meseci
konkretno recimo za primjer koji si odabrao, znaci Korpa.


Code:

class Korpa 
{
     var $proizvod;

     function Dodaj() 
{
$kojidodajes=$_GET['proizvod'];
$kododaje=$_SESSION['user'];
$kolkododaje=$_GET['kolicina'];

$query="INSERT INTO narudzbe VALUES ('$kojidodajes','$kododaje','$kolkododaje')";
mysql_query($query) or die(mysql_error());

echo "korisnik $kododaje ubacio je $kolkododaje $kojidodaje u korpu";
}

     function IspisiKorpu
{
$cijukorpu=$_SESSION['user'];

$query="SELECT * FROM narudzbe WHERE user='$cijukorpu'";
$result=mysql_query($query) or die(mysql_error());

echo "korisnik $cijukorpu ima ovo u kosarici:<br />";

while($row = mysql_fetch_assoc($result)) 
{
echo "artikal:$artikalID ---- komada:$kolkododaje";
}



}


}


normalno, ovo je skroz pojednostavljen primjer. treba recimo napravir provjeru da li u narudzbi do sad vec postoji proizvod koji je odabran, pa da ne pise u bazi na dva mjesta npr. 'talijenske cipele | 3 komada' pa onda opet 'talijanske cipele | 2 komada' nego da provjeri prije upisa, ako ih vec ima, pa da zbroji i kaze fino -> 5 komada brate :)

itd itd...

uglavnom, to je generalno princip...
 
Odgovor na temu

brainbuger

Član broj: 9647
Poruke: 440
*.vdial.verat.net.



+52 Profil

icon Re: Class-e i rad sa klasama21.09.2006. u 23:21 - pre 214 meseci
Citat:
1)Kako pozvati isti objekat smesten u klasu Korpa (var Proizvod) iz nekog drugog dela skripta posto je meni ocito da to radi samo nakon pravljenja nove instance: new Korpa.

Za pristup istom instance-u jedne klase mozes koristiti i reference, to jest adresu na objekat, jako je zgodno jer mozes samo proslediti drugoj funkciji adresu svog objekta a onda nastaviti rad sa njim u toj drugoj funkciji.
Code:

$korpa = new Korpa();
nekaFunkcija(&$korpa);

//ovo moze biti u nekom drugom skriptu ili cak moze biti konstruktor neke druge klase
function nekaFunkcija(&$korpa)
{
$proizvod = &$korpa->show(); 
}

Najbitnije je to sto se na taj nacin ne kopira ceo objekat u drugu funkciju vec samo memorijska adresu koja ima smesnu velicinu :)
 
Odgovor na temu

[es] :: PHP :: Class-e i rad sa klasama

[ Pregleda: 2649 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.