Heizer: Objekte und Referenzen verwirren

Liebes Forum

Da hab ich also vor zwei Tagen tatsächlich angefangen, PHP objektorientiert zu programmieren. Und ich bin begeistert.

Aber da ist nun dieses kleine Problem, daß ich einfach nicht verstehe. Ich habe eine statische Funktion in einer Klasse, die ein Objekt erzeugt:

Der Funktionsaufruf:

conf::load($conf,$myPath);

Die Funktion (der Klasse conf):

function load(&$conf,$myPath) {
 if (isset($_SESSION["conf"])) {
  $conf = &$_SESSION["conf"];
  $conf->setPath($myPath);
  echo gettype($conf);
 }
 else {
  $conf = &new conf($myPath);
  $_SESSION["conf"] = &$conf;
 }
 echo gettype($conf);
 return $conf;
}

Sinn des ganzen ist es, das Objekt $conf nur neu zu erzeugen, wenn es nicht in der Session vorhanden ist. Wie ihr seht, habe ich an zwei Punkten ein gettype() eingebaut, denn genau das ist das Problem. Innerhalb dieser Funktion ist $conf ein Objekt - wie erwartet. Aber außerhalb der Funktion wird es NULL.

Eigentlich sollte es doch als $conf außerhalb zur Verfügung stehen, da $conf ja als Referenz an load() übergeben wurde. Bei normalen Variablen (und auch schon bei Objekten in normalen Funktionen) hat das immer geklappt.

Wenn ich (wie oben schon eingetragen) $conf mit return zurückgebe, dann funktioniert es, aber ich möchte ja keine Kopie des Objekts, die nur Platz im Speicher braucht.

Woran liegts?

Ich danke Euch

Heizer

  1. Der Funktionsaufruf:

    conf::load($conf,$myPath);

    Die Funktion (der Klasse conf):

    function load(&$conf,$myPath) {
      $conf = &$_SESSION["conf"];

    Da hast du dieses Problem:
    http://de3.php.net/manual/de/language.references.arent.php

    Wenn ich (wie oben schon eingetragen) $conf mit return zurückgebe, dann funktioniert es, aber ich möchte ja keine Kopie des Objekts, die nur Platz im Speicher braucht.

    Das geht so:
    http://de3.php.net/manual/de/language.references.return.php

    dedlfix

    1. Ich danke dir recht herzlich, jetzt klappt alles

      Grüße

      Heizer

      1. Ich danke dir recht herzlich, jetzt klappt alles

        Grüße

        Heizer

        hallo!
        für mich persönlich haben die globalen variablen in eine klasse nichts verlohren da eine klasse immer ein bauplan zu etwas ist das auch in einem fremd system genau so wieder einsetzbar ist.
        dh. deine variablen die du benötigst schickst du beim erstellen den objektes in den construktor.
        ungetestet und in deinem fall könnte "static" weiterhelfen. entweder ab php 5 oder in php4 halten variablen ihre werte beim erzeugen neuer objekte

        gruß flobee

        --
        -----------------------
        .-´-:: flobee :: -´-.
        1. hallo!
          für mich persönlich haben die globalen variablen in eine klasse nichts verlohren da eine klasse immer ein bauplan zu etwas ist das auch in einem fremd system genau so wieder einsetzbar ist.

          in der Tat ist dies bei meinen Klassen der Fall. Ich übergebe ein objekt $conf der Klasse conf an jedes andere erzeugte Objekt, um so alle meine Konfigurationsdaten in allen Objekten zur verfügung zu haben. Ich wüßte nicht, wie ich sonst mit einer einfachen und zentralen Syntax auf diese Einstellungen zugreifen können sollte.

          Die Alternative wäre doch, jeder Methode die benötigte Konfigurationsoption mitzugeben, aber dann wird der Code wieder so undurchschaubar wie beim prozeduralen Programmieren. Oder mein Objektaufruf wird sehr lang, wenn ich alle in einer Klasse benötigten Konfigurationen einzeln an dieser Stelle übergebe.

          In dieser statischen Methode ging es gerade aber darum, festzustellen, ob die Objekte bereits erzeugt wurden, und in einer Session stehen, oder neu erzeugt werden müssen. Auf einem Fremdsystem das keine Session verwendet würde das lediglich bedeuten, daß die Objekte jedesmal erzeugt werden. Man könnte noch angeben können, welchen Namen die Sessionvariable bekommen soll, um unabhängig von bestehendem Code zu sein.

          dh. deine variablen die du benötigst schickst du beim erstellen den objektes in den construktor.
          ungetestet und in deinem fall könnte "static" weiterhelfen. entweder ab php 5 oder in php4 halten variablen ihre werte beim erzeugen neuer objekte

          Tut mir leid, aber der Inhalt dieser beiden Sätze will sich mir nicht wirklich offenbaren.

          Grüße

          Heizer

          1. hmm.. hab gerade einen filmriss das geht auch..
            Ich melde mich wenn es mir einfällt