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

Zaglupio sam se sa jednostavnim problemom

[es] :: PHP :: Zaglupio sam se sa jednostavnim problemom

[ Pregleda: 3420 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tiranin
Dorćol

Član broj: 37185
Poruke: 245
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Zaglupio sam se sa jednostavnim problemom20.04.2005. u 19:21 - pre 230 meseci
Pre dva dana sam počeo da učim PHP i zaglupio sam se sa jednostavnim (?) problemom.
Pokušao sam da napravim jednostavnu hijerarhiju tipa otac-dete, a da sve očeve smestim u neku kolekciju. I do nekog dela mi radi kako treba, a negde mi članovi niza nestanu.
Da ne bih zbunjivao ovim uvodnim tekstom prilažem ceo kod.
Code:

<?php
class Baza{
    var $niz;
    function Baza(){
        $this->niz = array();
    }
    function add($o) {
        $this->niz[] = $o;
    }
   
    function getByNum($num){
        if($num < 0)
                $num = 0;
        $broj = count($this->niz);
        if($num > $broj -1)
                    $num = $broj - 1;
        if(($this->niz[$num] != NULL))
           return $this->niz[$num];
        else
            return FALSE;
    }
}
class Otac{
    var $deca;
    var $datum;
    var $plata;
    function Otac($d, $c){
        $this->deca = array();
        $this->datum = $d;
        $this->plata = $c;
    }
    
    function add($dete){
        $this->deca[] = $dete;
        $cnt = count($this->deca);
        $qq = $this->deca[$cnt - 1];
        $ww = $this->getDete($cnt - 1);        // radi testiranja
        echo '<br>add dete='.$qq->ime.'=='.$ww->ime;  //radi OK
        echo '***'.$this->getBrojDece();        //
    }

    function getDete($num){  //ne gledati jer dovde i ne dolazi
            if($num < 0)
                $num = 0;
        $broj = count($this->deca);
        if($num > $broj -1)
            $num = $broj - 1;
        if(isset($this->deca[$num]))   
            return $this->deca[$num];
        else
            return FALSE;
      }
    
    function getBrojDece(){
        echo '<br>broj='.count($this->deca);  // u prvoj fazi radi,a posle ne
        $cnt = count($this->deca);
        return $cnt;    
    }
    
}

class Dete{
    var $ime;
    var $datum;
    var $napomena;
    function Dete($a, $d, $np = 'xx'){
        $this->ime = $a;
        $this->datum = $d;
        $this->napomena = $np;
    }
}

function puniSve(){
    $baza = new Baza();
//1. otac
    $o = new Otac('30.2.2005.','3000.00');
    $baza->add($o);
    $l = new Dete('Panteilija','23.2.2005.');
    $o->add($l);
    $l = new Dete('Jevrem','23.2.2005.');
    $o->add($l);
    $l = new Dete('Ambrozije','23.2.2005.');
    $o->add($l);
//2  otac
    $o = new Otac('22.2.2005.','5000.00');
    $baza->add($o);
    $l = new Dete('Sofronije','23.2.2005.');
    $o->add($l);
    $l = new Dete('Trpimir','23.2.2005.');
    $o->add($l);
    return $baza;
}
?>

<?php

    $baza = puniSve();
    $currIndex = 0;
    echo '<br><b>Napunjeno!!</b>';
    $otac = $baza->getByNum($currIndex) or die('Neuspelo dobijanje oca');
    echo '<br>Otac='.$otac->datum.'==='.$otac->plata;
//  dovde radi kako treba
// a dalje nece

// razne varijante i nista ne prolazi
    $child = $otac->deca;
    echo '<br>$child='.$child;
    $ccc = count($child);
    echo '<br>broj  ='.$ccc;
    $br = $otac->getBrojDece() or die('Neuspelo dobijanje broja');
    echo '<br>broj  ='.$br;
    for($i = 0; $i < $br; $i++){
        $dd = $otac->getDete($i);
        echo '<br>'.$dd->ime.'--'.$dd->datum;
    }
    
?>

Stavio sam neke komentare da bude jasnije. Preko funkcije puniSve() kreiram sve objekte i dodam ih nadređenim, koji ih čuvaju u nizu.
Par echo naredbi je tu da pratim šta se dešava i punenje mi izgleda OK.
Kada hoću posle da ih povlačim, uspem samo da uzmem objekat Otac iz klase Baza, i lepo ispišem njegove atribute, ali kada hoću da uzmem niz njegove dece ne uspevam.
Verovatno sam oćoravio pa ne vidim koju glupost sam napravio, pa molim strpljive posetioce da mi otvore oči.
Hvala
 
Odgovor na temu

m4j3v1c4
Oliver Maksimovic
Freelancer
Novi Sad

Član broj: 17007
Poruke: 63
*.ftn.ns.ac.yu.

ICQ: 99573455
Sajt: www.maksimovic.net


Profil

icon Re: Zaglupio sam se sa jednostavnim problemom22.04.2005. u 15:15 - pre 230 meseci
mrzi me da testiram tudje skripte, koristi vardump($varijabla) u razlicitim dijelovima kako bi provjerio da li funkcije odradjuju posao kako treba, da li se dodjeljuju vrijednosti itd itd. tako ces najlakse da skontas gdje si "promasio".
Freelance PHP/MySQL web developer - http://www.maksimovic.net
Aura+ - http://www.aura.rs.ba/ [progressive rock band]
 
Odgovor na temu

tiranin
Dorćol

Član broj: 37185
Poruke: 245
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: Zaglupio sam se sa jednostavnim problemom25.04.2005. u 08:51 - pre 230 meseci
Evo šta je bilo posredi:
Ne razmišljajući o referencama (mnogo bolje znam Javu, pa sam olako shvatio PHP objekte) ja sam prvo kreirao objekat Otac, stavio ga u Bazu, a onda njemu dodavao objekte klase Dete. Pošto se po defaultu, ne prenose reference objekata, već se pravi interna kopija (bar tako pročitah negde), nakon stavljanja objekta Otac u Bazu, moje dalje dodavanje objekata Dete, je radilo sa orginal objektom, a ne sa onom kopijom koja je postala deo objekta Baza.
Dovoljno je bilo samo da promenim redosled, pa da prvo dodam objekte klase Dete, objektu Otac, a da tek nakon tih dodavanja stavim objekat Otac u Bazu i sve radi kako treba.
Pravilnije rešenje bi bilo da se prosleđuju refernce, ali to ću kasnije kada malo boljem ispečem PHP.
A, ako neko ima savet po ovom pitanju, hvala unapred.
 
Odgovor na temu

Vuk Nikolić
Vuk Nikolić
Banovo Brdo, Beograd

Član broj: 4895
Poruke: 244
195.252.86.*

ICQ: 42139643
Sajt: www.letva.org


Profil

icon Re: Zaglupio sam se sa jednostavnim problemom27.04.2005. u 18:55 - pre 230 meseci
pogledao sam samo na brzinu, zar ne bi trebao kad dodajes u niz:
function add($o) {
$this->niz[] = $o;
}

da dodajes na odredjeno mesto u nizu tipa %this->[$i]=$o;
pri cemu ti je $i broj elementat u nizu (ili ako se dobro secam to je count($this->niz))
 
Odgovor na temu

tiranin
Dorćol

Član broj: 37185
Poruke: 245
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: Zaglupio sam se sa jednostavnim problemom29.04.2005. u 10:52 - pre 230 meseci
Citat:
green day: pogledao sam samo na brzinu, zar ne bi trebao kad dodajes u niz:
function add($o) {
$this->niz[] = $o;
}

da dodajes na odredjeno mesto u nizu tipa %this->[$i]=$o;
pri cemu ti je $i broj elementat u nizu (ili ako se dobro secam to je count($this->niz))

Ne, jer
Code:
$this->niz[] = $o;

dodaje na kraj niza, tj. automatski radi ono što ti predlažeš, ali to sve skupa nije uzrokovalo problem već prenos argumenata by value ili by reference ....
 
Odgovor na temu

Vuk Nikolić
Vuk Nikolić
Banovo Brdo, Beograd

Član broj: 4895
Poruke: 244
195.252.86.*

ICQ: 42139643
Sajt: www.letva.org


Profil

icon Re: Zaglupio sam se sa jednostavnim problemom29.04.2005. u 14:52 - pre 230 meseci
ok, sorry. (navike iz c++)
 
Odgovor na temu

tiranin
Dorćol

Član broj: 37185
Poruke: 245
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: Zaglupio sam se sa jednostavnim problemom29.04.2005. u 16:24 - pre 230 meseci
Citat:
green day: ok, sorry. (navike iz c++)

Potpuno te razumem, i ja sam u ovom problemu jer me Java razmazila kada razmišljam o objektima.
 
Odgovor na temu

Vuk Nikolić
Vuk Nikolić
Banovo Brdo, Beograd

Član broj: 4895
Poruke: 244
195.252.86.*

ICQ: 42139643
Sajt: www.letva.org


Profil

icon Re: Zaglupio sam se sa jednostavnim problemom29.04.2005. u 19:02 - pre 230 meseci
ja sad radim javu na faksu... pa onda kad pomesam sve jezike... nikad bolje...
 
Odgovor na temu

[es] :: PHP :: Zaglupio sam se sa jednostavnim problemom

[ Pregleda: 3420 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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