[ zgas @ 25.09.2007. 19:41 ] @
Moze li mi neko kratko moze odgovoriti na sledecih sedam pitanja:

Code:

$a->b->foo(); i 

$a->b->c; 


1. Da li ovi izrazi mogu predstavljaju akcije koje su nastale od na primer ove klase:?

Code:

class Klasa 
{
    var $b = 1;
    var $c = 2;
    var $d = 3;

    foo(){
        return 4;
    }

}


U vezi sa izrazima na pocetku:
2. Da li atribut b objekta $a uzima vrednost koju mu vraca funkcija foo() - a to je 4?
3. Da li atribut b objekta $a uzima vrednost atributa c (a to je 2)?

4. Da li to znaci da moze da se primeni i ovakav izraz dole:


Code:

$a->b->c->d;


5. Da li u predhodnom izrazu i atribut b i atribut c uzimaju vrednost od atributa d (vrednost 3)?

6. Da li je na prethodnom izrazu definitivno da i b i c i d jesu atributi iste klase koja je primenjena na objekt $a?

7. I konacno da li mozemo reci da u sledecem izrazu i promenljiva $p i atributi b i c objekta $a uzimaju vrednost atributa d a to je 3:

Code:

$p = $a->b->c->d;


Unapred hvala.

[ Miroslav Ćurčić @ 26.09.2007. 13:10 ] @
1. Ne, dobićeš grešku.
2. Ne, skript pokušava da pristupi metodi foo objekta $b koji je član objekta $a, ali kako $b nije objekat biće greška. Takođe nemaš nigde dodelu vrednosti (znak jednakost) pa niko neće promeniti vrednost.
3. Ne, pokušava da pristupi promenljivoj $c u objektu $b koji je član objekta $a ali niti je $b objekat niti možeš pozivati promenljive kao funkcije - moraš negde staviti dodelu vrednosti.
4. Ne.
5. Ne.
6. Ne, samo je $b dobro upotrebljen, greška nastaje pri pokušaju pristupa objektu $c koji nije metod objekta $b.
7. Ne. Kad bi objekat $a imao metod $b koji ima metod $c koji ima promenljivu $d onda bi $p stvarno dobio vrednost te promenljive $d, ali ništa drugo ne bi menjalo vrednost.

Osnovne stvari o objektima i klasama.
[ zgas @ 26.09.2007. 13:29 ] @
Ja sam ovo pitanje postavio po ugledu na deo koda koji je generisao PHPMake poznati program cije skripte inace rade na mom racunaru.
Evo deo koda iz skripte koju je generisao ovaj program:
Code:

$klijenti_kontakt_tel_email->id_kontakta->setDbValue($conn->Insert_ID());

$rsnew['id_kontakta'] =& $klijenti_kontakt_tel_email->id_kontakta->DbValue;


Zar to nije ono isto sto sam pitao? Ako jeste ispada da programeri PHPMake-a neznaju osnovne stvari u vezi sa klasama i objektima.
[ dakipro @ 26.09.2007. 13:43 ] @
Pa nije isto, procitaj detaljnije Miroslavov post. Znaju oni veoma dobro stvari u vezi sa klasama, izgleda da si ti nesto ovde propustio.
$klijenti_kontakt_tel_email je objekat
id_kontakta je takodje objekat unutar $klijenti_kontakt_tel_email objekta
setDbValue() je metoda objekta id_kontakta
[ Miroslav Ćurčić @ 26.09.2007. 15:18 ] @
Prvi red tog primera predstavlja pozivanje funkcije (metode) koja je zakopana duboko u pod-pod-pod-objekat (primeti da nema nigde dodele vrednosti), uzput joj prosleđivajući neki parametar,
drugi red predstavlja vađenje vrednosti neke promenljive koja je duboko u pod-pod-objektu (primeti znak za dodelu vrednosti).
[ zgas @ 01.10.2007. 09:52 ] @
Miroslave, hvala ti puno na trudu koji si ulozio da objasnis ove stvari.

Svako dobro.