Markus: Klassenproblem

Hallo,

ich habe folgendes Problem, ich möchte in einer Klasse auf ein OBjekt zugreifen das von ein anderen Klasse ist wie im Beispiel:

class foo{
  var $test;
  function bar(){
  }
}

$obi=new foo();

class abc{
  var $egal;
  function tut(){
    $obi->bar;
  }
}

Allerdgins möchte ich das Objekt $obi nicht übergeben. ICh habe irgendwo mal gelesen das es auch irgendwie anderes geht (ging um singleton, was ich allerdings noch nciht ganz verstanden habe), allerdings finde ich den Artikel nicht mehr und würde mich freuen wenn mir jemand weiterhelfen könnte.

Gruß

Markus

  1. echo $begrüßung;

    Es gibt ja viele Wege, die nach Rom führen. Da du dein Problem nur beispielhaft schilderst, kann ich dir auch nur beispielhaft antworten, ohne konkret werden zu können, was ich im konkreten Fall als optimale Lösung ansähe.

    ich habe folgendes Problem, ich möchte in einer Klasse auf ein OBjekt zugreifen das von ein anderen Klasse ist wie im Beispiel:

    class foo{
      var $test;
      function bar(){
      }
    }

    $obi=new foo();

    class abc{
      var $egal;
      function tut(){
        $obi->bar;
      }
    }

    1. $obi ist eine globale Variable (Objekte sind ja auch nur Variablen). Innerhalb tut() könnte darauf mit globals $obi oder über $GLOBALS['obi'] zugegriffen werden. Das, finde ich, ist aber meist eine schlechte Idee. Man legt sich damit auf einen konkreten Variablennamen fest.

    2. Man könnte im Konstruktor von abc eine Referenz entgegennehmen, die man ebenfals als Referenz in einer Klassenvariablen übergeben kann.

    class abc {
      var $lokales_obi;

    function abc(&$ein_obi_objekt) {
        $this->lokales_obi =& $ein_obi_objekt;
      }
    }

    Referenz deshalb, weil damit auch Änderungen außerhalb der von abc abgeleiteten Objekte auf $lokales_obi durchschlagen. PHP5 arbeitet bei der Übergabe von Objekten von Haus aus mit Referenzen, braucht also das & nicht.

    Allerdgins möchte ich das Objekt $obi nicht übergeben.

    Sieht so aus, als ob 2. damit ausscheidet.

    ICh habe irgendwo mal gelesen das es auch irgendwie anderes geht (ging um singleton, was ich allerdings noch nciht ganz verstanden habe), allerdings finde ich den Artikel nicht mehr und würde mich freuen wenn mir jemand weiterhelfen könnte.

    Wie oben gesagt, ohne genaue Problemkenntnis möchte ich keinen "verbindlichen" Tipp abgeben.

    Singleton- und Factory-Muster sind für PHP5-Syntax und -Möglichkeiten im PHP-Handbuch unter Patterns im Kapitel Classes and Objects (PHP 5) kurz beschrieben. Für PHP4 lassen die sich in abgewandelter Form auch anwenden.

    echo "$verabschiedung $name";