Klassen



  • Hallo Leute, wieso funktioniert folgender Code nicht ? Das ist doch das einmal eins der Objektorientierung ?

    class Test{
    var $v1;

    function getTest(){
    return $this;
    }
    }

    test=newTest();test = new Test(); test->v1 = 5;
    echo $test->getTest()->v1;

    P.S.
    Bitte schreibt keine Post, dass dies Sinnlos ist und das man genausogut echo $test->v1 schreiben könnte:
    Mir geht es hier nur ums Prinzip !



  • echo $test->getTest()->v1;

    ???

    was willst du damit sagen?



  • kA, aber probier's mal mit {}, also so:
    echo {test->getTest()}->v1; oder zur not eben: temp = test>getTest();test->getTest(); temp->v1;
    Aber das willst du wohl auch net 🙄


  • Mod

    ich hoffe mal schwer dass das nicht geht.

    das ist nämlich das einmal eins der OOP dass das nicht geht.

    stichwort: member sind private



  • Auf php.net hab ich folgendes bei den User-Beiträgen gefunden:

    // Similarly for objects, cannot do:
    $foo = $test->childTest()->blah();

    // Instead have to do:
    $temp = test>childTest();test->childTest(); foo = $temp->blah();

    Also musst du meinen 2. Lösungsvorschlag nehmen (oder es ganz anders machen 😉 )



  • THX FLENDERS, du bist echt die beste.



  • wieso die?



  • uuuuups, ich dachte du wärst Flenders seine Frau. 😃 🙄



  • ach, heißt seine Frau so?! Ich schaue nie die Simpsons 😃



  • @elise
    Was meinst du mit mit: "Was willst du damit sagen ?"
    Ich versuche eine direkte dereferenzierenung des Object - Pointers zu machen, wie es in jeder anderen mir bekannten Sprache wie Java, Javascript, C++, Delphi usw. möglich ist...

    Bsp. C++

    class Rect{
    public:
     float xPos,yPos,width,height;
    };
    
    class Object{
    private:
     Rect rc;
    public:
     Rect *getRect(void){
      return &this->rc;
     }
    };
    
    Object obj;
    obj.getRect()->xPos = 5;
    obj.getRect()->yPos = 10;
    


  • ich denke, wir müssen uns daran gewöhnen( auch im hinblick auf die objektorientierung in php5), daß alles über funktionen abgehandelt wird

    (nur ein spiel, und achtung: eine klasse darf in php nicht object heißen, schlüsselwort ... )

    <?php
    
    class Rect{
    
     var $xPos=2;
     var $yPos=3;
     var $width=4;
     var $height=5;
    
     function Rect(){
        $this->xPos=13;
        echo "konstruktor rc: ".$this->xPos."<br>";
     }
    }
    
    class Test{
    
     var $rc;
    
     function Test(){
        $this->rc=&new Rect();
        echo "konstruktor Test: ".$this->rc->xPos."<br>";
     }
    
     function getRect(){
      return get_class_vars(get_class($this->rc));
     }
    }
    
    $test=new Rect();
    $var_arr= get_class_vars(get_class($test));
    foreach($var_arr as $key => $value) 
        echo  $key." -- ".$value."<br>";
    
    $obj=&new Test();
    $var_arr2=$obj->getRect();
    
    foreach($var_arr2 as $key => $value) 
        echo  $key." -- ".$value."<br>";  
    ?>
    

    ausgabe:

    konstruktor rc: 13
    xPos -- 2
    yPos -- 3
    width -- 4
    height -- 5
    konstruktor rc: 13
    konstruktor Test: 13
    xPos -- 2
    yPos -- 3
    width -- 4
    height -- 5
    

    ps: funktioniert nur bei standardwerten innerhalb der klasse, nicht durch initialisierung durch den konstruktor
    <ediT> ausgabe noch angefügt</edit>

    [ Dieser Beitrag wurde am 07.02.2003 um 12:45 Uhr von elise editiert. ]


Anmelden zum Antworten