mod: auf Variablen innerhalb einer Objektkomposition zu greifen

Hallo

ich habe eine Objektkomposition, die sieht wie folgt aus:

$headClass = new HeadClass;
$headClass->u1 = new UnderClass1;
$headClass->u2 = new UnderClass2;

Meine Frage: Wie kann ich innerhalb einer Funktion von $headClass->u1 auf eine Eigenschaft von $headClass->u2 zu greifen.

Gruß mod.

  1. Tach!

    Wie kann ich innerhalb einer Funktion von $headClass->u1 auf eine Eigenschaft von $headClass->u2 zu greifen.

    Am "saubersten" ist, wenn du alle Abhängigkeiten übergibst, statt dass du sie dir anhand von Variablennamen und dergleichen holst. Also UnderClass2 bekommt beim Konstruktoraufruf (oder später) das andere Objekt übergeben (passiert seit PHP5 per Referenz) und merkt es sich intern.

    dedlfix.

    1. Hallo,

      Am "saubersten" ist, wenn du alle Abhängigkeiten übergibst, statt dass du sie dir anhand von Variablennamen und dergleichen holst. Also UnderClass2 bekommt beim Konstruktoraufruf (oder später) das andere Objekt übergeben (passiert seit PHP5 per Referenz) und merkt es sich intern.

      class headClass {
        public $underClass1 = '';
        public $underClass2 = '';
        public $status = 0;

      function __construct() {
          $this->underClass1 = new U1;
          $this->underClass1 = new U2;
          $this->status = 1;
        }
      }

      class U1 {
      }

      class U2 {
        function write() {
          // Wie kann ich status inkludieren ??
        }
      }

      Hast du mal Beispiele wo das erklärt steht?

      Gruß mod

      1. Tach!

        class headClass {
          public $underClass1 = '';
          public $underClass2 = '';
          public $status = 0;

        function __construct() {
            $this->underClass1 = new U1;
            $this->underClass1 = new U2;
            $this->status = 1;
          }
        }

        class U1 {
        }

        class U2 {
          function write() {
            // Wie kann ich status inkludieren ??
          }
        }

        Im Konstruktor von headClass:

        $this->underClass2 = new U2($this);

        Und class U2 erweitert:

        class U2 {  
          // U2 merkt sich einen Verweis auf das headClass-Object  
          private $headObject;  
          
          // den es über den Konstruktor mitgegeben bekommt  
          function __construct($headObject) {  
            $this->headObject = $headObject;  
          }  
          
          function write() {  
            // und kann dann darauf zugreifen  
            echo $this->headObject->status;  
          }  
        }
        

        dedlfix.

        1. Im Konstruktor von headClass:

          $this->underClass2 = new U2($this);

          Und class U2 erweitert:

          class U2 {

          // U2 merkt sich einen Verweis auf das headClass-Object
            private $headObject;

          // den es über den Konstruktor mitgegeben bekommt
            function __construct($headObject) {
              $this->headObject = $headObject;
            }

          function write() {
              // und kann dann darauf zugreifen
              echo $this->headObject->status;
            }
          }

            
          Das ist ja Klasse! Wenn ich nun $status nach Definierung der Klasse und Aufruf des Konstruktors verändere wird es automatisch auch in den Klassen geämdert oder muss ich den Konstruktor nochmal aufrufen?  
            
          class headClass {  
            public $underClass2 = '';  
            public $status = 0;  
            
            function \_\_construct() {  
               $this->status = 1;  
               $this->underClass2 = new U2($this);  
            }  
          }  
            
          class U2 {  
             private $headObject;  
            
             function \_\_construct($headObject) {  
               $this->headObject = $headObject;  
             }  
            
            function write() {  
               echo $this->headObject->status;  
             }  
          }  
            
          $head = new headClass;  
          $head->status = 2;  
          $head->underClass2->write(); // Gibt das mir nun 1 oder 2 aus?  
            
          Gruß mod.
          
          1. Tach!

            Das ist ja Klasse! Wenn ich nun $status nach Definierung der Klasse und Aufruf des Konstruktors verändere wird es automatisch auch in den Klassen geämdert oder muss ich den Konstruktor nochmal aufrufen?

            Bei Objekten werden Referenzen übergeben und keine Kopien. Über die Referenz greifst du immer auf das originale Objekt zu. Alles was du darin machst, siehst du auch beim Zugriff über eine Referenz. Im Gegensatz dazu werden Arrays und alle anderen Typen per Kopie übergeben. Bei einer Änderung hat es keine Auswirkungen auf die anderen Kopien.

            dedlfix.

            1. vielen Dank für die Hilfe!