kostenloser Webspace werbefrei: lima-city


Konstanten verschachtelter Klassen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    j***l

    Hallo,

    ich bin noch recht unerfahren in PHP und habe eine Frage, die ich durch meine bisherige Recherche nicht beantworten konnte.

    Problemstellung:
    Ich erstelle in einer Klasse (hier genannt "Oben") ein Objekt, in dem Konfigurationen definiert sind und speichere die Referenz in einer Variable. Dann erstelle ich erneut in dieser Klasse ein weiteres Objekt. Die Klasse um dieses zu erstellen (hier genannt "Unten") benötigt eine Konfiguration aus dem bereits erstellten Objekt.

    Bisheriger Ansatz:
    class Oben
    {
    	public $config;
    	
    	public $unten;
    	
    	public function __construct() {
    		$this->config = new Config();
    		$this->unten = new Unten($this->config);
    	}
    }
    
    class Unten
    {
    	private $config;
    	
    	public function __construct($config) {
    		$this->config = $config;
    		$this->method();
    	}
    
    	private function method() {
    		echo $this->config->get('key');
    	}
    }


    Frage:
    Gibt es eine Möglichkeit in der Klasse "Unten" direkt auf die in der Klasse "Oben" definierte Variable $config zuzugreifen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. willstdueswissen

    Kostenloser Webspace von willstdueswissen

    willstdueswissen hat kostenlosen Webspace.

    Entweder du übergibst das ganze objekt oder übergibst nur die Variable.
    Hier nen Beispiel:
    $oben = new Oben();
    $unten = new Untent($oben);
    
    
    /////////
    class Untenten{
        private $config;
        public function __construct($object) {
            $this->config = $object->config;
        }
    }


    $oben = new Oben();
    $unten = new Unten($oben->config);
    
    class Untenten{
        private $config;
        public function __construct($conf) {
            $this->config = $conf;
        }
    }


    Ein Objekt das du in einer Klasse erstellst exestiert nur in der Klasse.

    Wenn du es verschachtelt haben möchtest, ist wie du es gemacht hast richtig.
    Irgendwie musst du ja den Wert übergeben ;)

    Wenn ich falsch liege bitte korregieren.
    Aber ich sage es gibt keine andere Möglichkeit, als den Wert zu übergeben.

    Was sollte daran auch nicht gut sein?

    Beitrag zuletzt geändert: 3.9.2014 10:29:23 von willstdueswissen
  4. Autor dieses Themas

    j***l

    Momentan habe ich es so gelöst, wie in deinem zweiten Beispiel beschrieben, indem ich das Objekt einfach an die Klasse übergebe.
    Danke für deine Antwort!
  5. karlsve

    Moderator Kostenloser Webspace von karlsve

    karlsve hat kostenlosen Webspace.

    Eventuell wäre es auch eine Möglichkeit die $config Variable der "Oben"-Klasse statisch zu machen. Auf die Art und Weise könntest du per Oben::$config darauf zugreifen. Das setzt natürlich voraus das du 100%ig sicher bist das die Klasse bereits instantiert wurde und somit Oben::$config nicht null ist.

    MfG
    karlsve
  6. tafelrunde-der-neuzeit

    tafelrunde-der-neuzeit hat kostenlosen Webspace.

    Wenn die Sache noch komplexer wird, solltest du dir vielleicht das Prinzip der Dependeny Injection angucken. Oder des Observers mit hilfe von Events, um deine Objekte sinnvoll miteinander zu vernetzen.
  7. In deinem Fall würde sich ein etwas anderer Ansatz lohnen. Wie karlsve schon erwähnt hat, solltest du die $config Variable als statisch definieren. Aber anstatt direkt auf die Variable zuzugreifen, würde ich anstelle eine Wrapper Methode verwenden:

    class myClassA {
    
      protected static $_config;
    
      public function config() {
        id(!isset(static::$_config)) {
          // config laden...
        }
        return static::$_config;
      }
    
    }
    
    class myClassB extends myClassA {
    
      public function foo() {
        echo $this->config['foo'];
      }
    
    }

    Alles recht simpel und man muss nicht wirklich darauf achten das man die Config manuell geladen hat, erledigt sich ja automatisch.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!