Announcement

Collapse
No announcement yet.

(?) Kleines Problem mit Klassen und deren Variablen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • (?) Kleines Problem mit Klassen und deren Variablen

    Servus.
    Kurz zum 'Aufbau' (vereinfacht) meines Systems:
    Alle Requests werden über die index.php geleitet. Es gibt 2 Klassen (class System, class Page) wobei in System unteranderem aus der DB, Eigenschaften zu den einzelnen Requests geholt werden. In Page sollen dann alle Eigenschaften je Seite in Variablen gespeichert werden. In der index werden beide Klassn inkludiert.
    Nun zu meinem Problem.
    Erstelle ich in der index.php eine neue Instanz der Klasse System, steht diese mir zu Verfügung, über all, in jeder Datei die in inkludiere, ausgenommen in Funktionen und anderen Klassen, logisch. Ich möchte nun innerhalb der Klasse System, Variablen aus der Klasse Page (e.g. $Page->Enabled) abrufen bzw verändern können. Gleichzeitig sollen die Änderungen aber auch z.B. in der index.php möglich sein (Ansehen, verändern).
    Mit' class System extends Page {}' erstelle ich aber mit System eine Kind-Klasse abgeleitet von Page, ergo unsinn. Erstelle ich in System im Konstruktor eine neue Instanz von Page, ist das natürlich was völlig anderes als die, die ich in der index.php habe.
    Meine Frage ist nun:
    Wie schaffe ich es, dass ein und die selbe Klasse Page sowohl in z.B. der index.php und in einer weiteren Klasse System zur Verfügung steht?
    Gruß.
    Ants aren't dead

  • #2
    Hallo,

    siehe Grundlagen: Geltungsbereich von Variablen

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Bei Klassen, die nur einmal instanziiert werden sollen, ist es auch sinnvoll mit einer Factoring-Methode zu arbeiten und die Klasse die eigene Instanz in einer statischen Eigenschaft selbst verwalten zu lassen.

      PHP Code:
      <?php

      class myTest
      {
        public            
      $variable  null;
        protected static  
      $_instance null;

        public function 
      __construct()
        {
          
      $this->variable 'irgendwas';
        }

        public static function 
      Instance()
        {
          if (!isset(
      self::$_instance)) {
            
      self::$_instance = new myTest();
          }

          return 
      self::$_instance;
        }
      }

      // Erzeugen einer Instanz a
      $a =& myTest::Instance();
      echo 
      'variable: '.$a->variable.'<br />';

      // Setzen der Eigenschaft variable der Instanz a
      $a->variable 'irgendwas anderes';
      echo 
      'variable: '.$a->variable.'<br />';

      // Neue Instanz b, enthält eine Referenz auf die ursprüngliche Instanz a
      $b =& myTest::Instance();
      echo 
      'variable: '.$b->variable.'<br />';
      Der global verfügbare statische Aufruf von myTest::Instance() gibt IMMER ein- und diesselbe Klasseninstanz - und zwar die beim allerersten Aufruf erzeugte - zurück.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Aha, das ist des Rätsels Lösung. Dann versuche ich dies mal anzuwenden. Vielen Dank für die Hilfestellung.
        Ants aren't dead

        Comment

        Working...
        X