Likes Likes:  0
Resultaten 1 tot 15 van de 19
Pagina 1 van de 2 1 2 LaatsteLaatste
Geen

Onderwerp: PHP Classes

  1. #1
    Jorr.it
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    PHP Classes


    Hallo lezer,

    Stel, ik heb twee classes: Auto en Wiel. De class Auto heeft o.a. een var
    Merk een array Wielen, waarvan elk element gevuld kan worden met een Wiel
    object. In de class Wiel wil ik achterhalen wat het Merk van de Auto is
    waarvan dat specifieke Wiel object een element van is. Hoe kan ik dat doen?
    Een voorbeeld zie je hieronder. In de laatste regels zie je het probleem
    omschreven als term "parentMerk ".



    $mijnLada = new Auto;
    $mijnLada ->Merk = "Lada";
    $mijnLada->Wielen[0] = new Wiel;
    $mijnLada->Wielen[0]->Merk = "Dunlop";
    echo($mijnLada->Wielen[0]->PastDeWiel() );

    class Auto {
    var $Merk;
    var $Wielen;
    }

    class Wiel {
    var $Merk;
    function PastDeWiel() {
    if ($this->Merk == "Dunlop" && parentMerk == "Lada" ) {
    return false;
    }
    else {
    return true;
    }
    }
    }



  2. #2
    Michiel de Roo
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    Jorr.it wrote:
    > Hallo lezer,
    >
    > Stel, ik heb twee classes: Auto en Wiel. De class Auto heeft o.a. een var
    > Merk een array Wielen, waarvan elk element gevuld kan worden met een Wiel
    > object. In de class Wiel wil ik achterhalen wat het Merk van de Auto is
    > waarvan dat specifieke Wiel object een element van is. Hoe kan ik dat doen?
    > Een voorbeeld zie je hieronder. In de laatste regels zie je het probleem
    > omschreven als term "parentMerk ".
    >
    >
    >
    > $mijnLada = new Auto;
    > $mijnLada ->Merk = "Lada";
    > $mijnLada->Wielen[0] = new Wiel;
    > $mijnLada->Wielen[0]->Merk = "Dunlop";
    > echo($mijnLada->Wielen[0]->PastDeWiel() );
    >
    > class Auto {
    > var $Merk;
    > var $Wielen;
    > }
    >
    > class Wiel {
    > var $Merk;
    > function PastDeWiel() {
    > if ($this->Merk == "Dunlop" && parentMerk == "Lada" ) {
    > return false;
    > }
    > else {
    > return true;
    > }
    > }
    > }


    Een oplossing zou zijn om de class Wiel een reference naar de bijbehorende
    auto mee te geven:

    class Wiel
    {
    var $auto;

    function Wiel(&$auto)
    {
    $this->auto =& $auto;
    }

    function PastDeWiel()
    {
    .....
    if($this->auto->Merk=='Lada') {
    ....
    }
    }

    }

    en:

    $mijnLada->Wielen[0] = new Wiel($mijnLada);

    De vraag die blijft hangen is wel of het merk auto een eigenschap van het
    wiel is, en dus of je dit op een dergelijke manier zou moeten opzetten.

  3. #3
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Jorr.it" <jorrit@jorr.punt.it> wrote:

    > Hallo lezer,


    Hallo schrijver Jorr.it,

    > Stel, ik heb twee classes: Auto en Wiel. De class Auto heeft o.a. een
    > var Merk een array Wielen, waarvan elk element gevuld kan worden met
    > een Wiel object. In de class Wiel wil ik achterhalen wat het Merk van
    > de Auto is waarvan dat specifieke Wiel object een element van is.
    > Hoe kan ik dat doen?

    <knip>

    Je kunt een property als 'ownerObject' aan je Wiel toevoegen (of in dit
    geval wat minder universeel 'autoObject' o.i.d.). Je geeft die eigenschap
    dan bij de aanmaak van een Wiel Object als argument aan de constructor.
    [Dus bijv.: $wielObject = $mijnLada->Wielen[] = new Wiel($mijnLada); ]

    Je kunt dan iets zeggen als: echo $wielObject->autoObject->Merk;

    WD


  4. #4
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Michiel de Roo" <yourlove@welovespam.nl> wrote:

    > function Wiel(&$auto)
    > {
    > $this->auto =& $auto;
    > }


    Waarbij mag worden opgemerkt dat in PHP5 het expliciete refereren onnodig is
    omdat ook voor objecten 'by reference' de default is.

    WD


  5. #5
    Jorr.it
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    Michiel de Roo wrote:
    > Jorr.it wrote:
    >> Stel, ik heb twee classes: Auto en Wiel. De class Auto heeft o.a.
    >> een var Merk een array Wielen, waarvan elk element gevuld kan worden
    >> met een Wiel object. In de class Wiel wil ik achterhalen wat het
    >> Merk van de Auto is waarvan dat specifieke Wiel object een element
    >> van is. Hoe kan ik dat doen? Een voorbeeld zie je hieronder. In de
    >> laatste regels zie je het probleem omschreven als term "parentMerk ".

    >
    > Een oplossing zou zijn om de class Wiel een reference naar de
    > bijbehorende auto mee te geven:


    Perfect, bedankt!



  6. #6
    Jorr.it
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    Warden Dave wrote:
    > "Jorr.it" <jorrit@jorr.punt.it> wrote:
    >> Stel, ik heb twee classes: Auto en Wiel. De class Auto heeft o.a. een
    >> var Merk een array Wielen, waarvan elk element gevuld kan worden met
    >> een Wiel object. In de class Wiel wil ik achterhalen wat het Merk van
    >> de Auto is waarvan dat specifieke Wiel object een element van is.
    >> Hoe kan ik dat doen?

    > <knip>
    >
    > Je kunt een property als 'ownerObject' aan je Wiel toevoegen (of in
    > dit geval wat minder universeel 'autoObject' o.i.d.). Je geeft die
    > eigenschap dan bij de aanmaak van een Wiel Object als argument aan de
    > constructor. [Dus bijv.: $wielObject = $mijnLada->Wielen[] = new
    > Wiel($mijnLada); ]


    Nogmaals bedankt. Ik heb toch nog een vraagje over de laatste regel code die
    WD noemt. Ik zou dit ook graag by reference willen zetten, dus zo:

    $wielObject =& $mijnLada->Wielen[] =& new Wiel($mijnLada);

    Dit geeft echter een foutmelding in PHP4. Wat is de beste manier om dit dan
    wel te doen?

    --
    Interessante page over references in PHP4:
    http://www.obdev.at/developers/articles/00002.html



  7. #7
    Jorr.it
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    Jorr.it wrote:
    > $wielObject =& $mijnLada->Wielen[] =& new Wiel($mijnLada);
    >
    > Dit geeft echter een foutmelding in PHP4. Wat is de beste manier om
    > dit dan wel te doen?


    Oja, vooralsnog gebruik ik deze (omslachtige) methode:

    $mijnLada->Wielen[] =& new Wiel($mijnLada);
    $wielObject =& $mijnLada->Wielen[count($mijnLada->Wielen)-1];





  8. #8
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Jorr.it" <jorrit@jorr.punt.it> wrote:

    > $wielObject =& $mijnLada->Wielen[] =& new Wiel($mijnLada);
    >
    > Dit geeft echter een foutmelding in PHP4. Wat is de beste manier om dit
    > dan wel te doen?


    Je kunt denkelijk zonder die expliciete referenties in die expressie (al
    durf ik m'n hand niet in het vuur te steken voor alle PHP4 versies; sommigen
    lijken niet van het object-kopieeren af te houden te zijn).

    Het is makkelijk te testen met iets als:

    class Auto {

    var $merk;
    var $kleur;
    var $wielen = array();

    function Auto($merk, $kleur) {
    $this->merk = $merk;
    $this->kleur = $kleur;
    }
    }


    class Wiel {

    var $auto;

    function Wiel(&$auto) {
    $this->auto =& $auto;
    }
    }

    $a = new Auto("Lada", "rood");
    $w = $a->wielen[] = new Wiel($a);
    $a->kleur = "blauw";

    echo $w->auto->kleur;
    echo $a->wielen[0]->auto->kleur;


    Als je dan nog 'rood' ziet is er pas iets mis...

    WD


  9. #9
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Jorr.it" <jorrit@jorr.punt.it> wrote:
    > Jorr.it wrote:


    >> $wielObject =& $mijnLada->Wielen[] =& new Wiel($mijnLada);
    >>
    >> Dit geeft echter een foutmelding in PHP4. Wat is de beste manier
    >> om dit dan wel te doen?


    Je hoeft hier niet per se zo expliciet te refereren omdat ook een
    kopie van het geconstrueerde Wiel Object de juiste verwijzing naar
    het Auto Object zal bevatten. Zoals ik in de eerdere postjes
    schreef kun je dus gewoon toe met:

    $wielObject = $mijnLada->Wielen[] = new Wiel($mijnLada);

    [ Ik neem overigens aan dat een antwoord, mocht je 't toch willen
    weten, zou kunnen zijn: $o = $a[] =& new obj($r); ]

    WD



  10. #10
    Michiel de Roo
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    Jorr.it wrote:
    > Jorr.it wrote:
    >
    >>$wielObject =& $mijnLada->Wielen[] =& new Wiel($mijnLada);
    >>
    >>Dit geeft echter een foutmelding in PHP4. Wat is de beste manier om
    >>dit dan wel te doen?

    >
    >
    > Oja, vooralsnog gebruik ik deze (omslachtige) methode:
    >
    > $mijnLada->Wielen[] =& new Wiel($mijnLada);
    > $wielObject =& $mijnLada->Wielen[count($mijnLada->Wielen)-1];


    dit zou zonder meer eenvoudiger kunnen met:

    $wielObject =& new Wiel($mijnLada);
    $mijnLada->Wielen[] =& $wielObject;

    ;-)

  11. #11
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Warden Dave" <warden_dave@mnsys.invalid> wrote:

    > [ Ik neem overigens aan dat een antwoord, mocht je 't toch willen
    > weten, zou kunnen zijn: $o = $a[] =& new obj($r); ]


    ....Wat echter niet correct is. 't Lijkt in PHP overigens wel met omwegen te
    mogen als bijv.: array_push($a, $o =& new obj($r));

    WD


  12. #12
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Warden Dave" <warden_dave@mnsys.invalid> wrote:

    > ...Wat echter niet correct is. 't Lijkt in PHP overigens wel met omwegen
    > te mogen als bijv.: array_push($a, $o =& new obj($r));


    Wat natuurlijk ook niet correct is (dat is geen referentie... 1 tikje blind
    hedenochtend), maar goed...

    WD


  13. #13
    Michiel de Roo
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    Warden Dave wrote:
    > "Jorr.it" <jorrit@jorr.punt.it> wrote:
    >
    >> $wielObject =& $mijnLada->Wielen[] =& new Wiel($mijnLada);
    >>
    >> Dit geeft echter een foutmelding in PHP4. Wat is de beste manier om dit
    >> dan wel te doen?

    >
    >
    > Je kunt denkelijk zonder die expliciete referenties in die expressie (al
    > durf ik m'n hand niet in het vuur te steken voor alle PHP4 versies;
    > sommigen lijken niet van het object-kopieeren af te houden te zijn).
    >


    In PHP4 wordt alles gekopieerd als je geen expliciete referenties maakt.
    Zelfs

    $a = new Auto("Lada", "rood");

    levert al twee objecten op, new Auto("Lada", "rood") en de kopie ervan die
    in $a zit. Alhoewel de eerste natuurlijk niet meer toegenakelijk is. De
    reden waarom veel mensen schrijven:

    $a =& new Auto("Lada", "rood");

    In jouw voorbeeld:

    $a = new Auto("Lada", "rood");
    $w = $a->wielen[] = new Wiel($a);
    $a->kleur = "blauw";

    Hier zijn $a en $w->auto hetzelfde, maar je hebt wel drie kopieen van
    hetzelfde wiel gemaakt, te weten new Wiel($a), $a->wielen[] en $w.

  14. #14
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Michiel de Roo" <yourlove@welovespam.nl> wrote:

    > In jouw voorbeeld:
    >
    > $a = new Auto("Lada", "rood");
    > $w = $a->wielen[] = new Wiel($a);
    > $a->kleur = "blauw";
    >
    > Hier zijn $a en $w->auto hetzelfde, maar je hebt wel drie kopieen van
    > hetzelfde wiel gemaakt, te weten new Wiel($a), $a->wielen[] en $w.


    Natuurlijk (al gaat het originele object waarmee de constructor aan de slag
    is verloren), maar zoals ik al opmerkte is de 'auto'-referentie in de
    kopieen correct; daar ging het om. (Je kunt wel overal expliciet refereren,
    maar niet altijd is dat nuttig.)

    WD


  15. #15
    Warden Dave
    PHP Classes
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: PHP Classes

    "Warden Dave" <warden_dave@mnsys.invalid> wrote:

    > Natuurlijk (al gaat het originele object waarmee de constructor aan de
    > slag is verloren), maar zoals ik al opmerkte is de 'auto'-referentie in de
    > kopieen correct; daar ging het om. (Je kunt wel overal expliciet
    > refereren, maar niet altijd is dat nuttig.)


    Maar je hebt hier gelijk, had ik moeten toevoegen, omdat werken met een
    kopie van een Wiel Object niet zo nuttig is en je bij bewerking meer aan een
    'hardlink' hebt.

    WD


Pagina 1 van de 2 1 2 LaatsteLaatste

Webhostingtalk.nl

Contact

  • Rokin 113-115
  • 1012 KP, Amsterdam
  • Nederland
  • Contact
© Copyright 2001-2021 Webhostingtalk.nl.
Web Statistics