noob: Was heisst das?

Hi

ich habe in der PHP Doku unter Klassen gerade folgendes entdeckt:

"Anmerkung: In PHP 4 sind nur konstante Initialisierungen für var Variablen erlaubt. Um Variablen mit nicht konstanten Werten zu initialisieren, benötigen Sie eine Funktion zur Initialisierung, welche beim Erstellen eines Objektes automatisch von der Klasse aufgerufen wird. Eine solche Funktion wird Konstruktor genannt (siehe unten)."

Das ganze kommt von dieser Seite: http://www.php.net/manual/de/language.oop.php

Was soll das bitte heissen?
Und muss ich wikrlich jede neue Variable mit var $bla initialisieren? zb auch in if Anweisungen?

  1. Hallo,

    nein das ist nur bei class { ...}

    Bei normalen PHP Code musst du das nicht machen

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. nein das ist nur bei class { ...}

      Bei normalen PHP Code musst du das nicht machen

      Ich lerne aber gerade Klassen. Also bei Klassen muss ich alle Variablen mit var initialisieren und es dürfen keine dynamischen sein? Die müssen dann in einer Funktion erstellt werden?
      Irgendwie verstehe ich die Logik dabei nicht ganz.

      1. nim am besten am anfang des scripts:

        global $variable1, $variable2;

        1. Hallo,

          schau dir doch die Beispiele auf der Seite an, dort sieht man if anweisungen etc.

          MFG
          Andavos

          --
          http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
        2. nim am besten am anfang des scripts:

          global $variable1, $variable2;

          Hm, so ganz verstehe ich dieses Beispiel aber nicht:

          <?php
          /* Keine wird in PHP 4 funktionieren */
          class Cart
          {
             var $todays_date = date("Y-m-d");
             var $name = $firstname;
             var $owner = 'Fred ' . 'Jones';
             var $items = array("VCR", "TV");
          }

          /* So sollte es gemacht werden */
          class Cart
          {
             var $todays_date;
             var $name;
             var $owner;
             var $items;

          function Cart()
             {
                 $this->todays_date = date("Y-m-d");
                 $this->name = $GLOBALS['firstname'];
                 /* etc. . . */
             }
          }
          ?>

          Sind da die Variablen $today_date, $name, ... etwa einfach so in der Funktion Cart() verfügbar? Oder ist das $this->today_date etwas anderes? Was ist überhaupt $this?

          1. Hi Noob

            Da ich auch gerade PHP lerne und die Doku von php.net verwende, kann ich dir vielleicht weiterhelfen. Zuerst etwas Begriffsdefinition:
            Als 'initialisieren' bezeichnet man nur die erste Wertzuweisung für eine Variable, damit diese keinen Undefinierten Wert hat. PHP tut dies automatisch, wenn du das nicht tust.
            Du hast das in deinen Postings z.T. mit dem Deklarieren von Variablen verwechselt. Deklarieren bedeutet, dass du eine Variable im Programm bekannt macht, was in PHP (leider) nicht zwingend notwendig ist. Leider sind meine C-Kenntnisse nicht mehr ganz frisch, wesshalb ich nicht all zu genau darauf eingehen kann. Ein Blick in eine gute C-Referenz zu diesem Thema lohnt sich auf jeden Fall.

            Ein kleines Beispiel dazu:

            var $a;     // $a wird deklariert
            $a = 0;     // $a wird nun von uns initialisiert
            var $b = 3; // $b wird deklariert und initialisiert

            Hm, so ganz verstehe ich dieses Beispiel aber nicht:

            <?php
            /* Keine wird in PHP 4 funktionieren */
            class Cart
            {
               var $todays_date = date("Y-m-d");
               var $name = $firstname;
               var $owner = 'Fred ' . 'Jones';
               var $items = array("VCR", "TV");
            }

            Dies funktioniert in PHP4 nicht, da der Wert von $todays_date (beispielsweise) nicht konstant ist. Jedes mal wenn du diese Klasse instanzierst, d.h. ein Objekt von ihr ableitest, wird der Variablen ein anderer Wert, nämlich das aktuelle Datum, zugewiesen. Wenn du eine Variable verwendest, die zu Beginn immer denselben Wert hat, zum Beispiel eine Counter-Variable für eine Schleife, dann kannst du diese auch in PHP4 mit 'var $counter = 0;' initialisieren, weil 0 ein konstanter Wert ist.

            /* So sollte es gemacht werden */
            class Cart
            {
               var $todays_date;
               var $name;
               var $owner;
               var $items;

            function Cart()
               {
                   $this->todays_date = date("Y-m-d");
                   $this->name = $GLOBALS['firstname'];
                   /* etc. . . */
               }
            }
            ?>

            Die Initialisierung verlagerst du jetzt einfach in den sogenannten Konsturktor. Der Konstruktor ist eine Funktion, die denselben Namen wie die Klasse trägt und beim Instanzieren der Klasse automatisch aufgerufen wird. Der Konstuktor kann auch Parameter enthalten, womit du Variablen deines Objektes mit Werten von Ausserhalb initialisieren kannst. Das Sprachreferenz-Kapitel der PHP-Doku hilft dir auch dazu weiter.

            Sind da die Variablen $today_date, $name, ... etwa einfach so in der Funktion Cart() verfügbar?

            Ja, klar, denn sie sind in demselben Gültigkeitsbereich. Dazu findest du auch Infos im Sprachreferenz-Kapitel der PHP-Doku.

            Oder ist das $this->today_date etwas anderes? Was ist überhaupt $this?

            $this verweist immer auf sich selbst, d.h. innerhalb einer Klasse auf die aktuelle Instanz eines Objektes. Lies am besten das gesammte Sprachreferenz-Kapitel der PHP-Doku durch und probiere alles aus und frage nach, bis du es verstanden hast. Der Aufwand scheint gross, jedoch verstehst du dann PHP richtig und dir unterlaufen keine dummen Anfänger-Fehler. Es lohnt sich wirklich, zumindest IMHO. Du lernst auch Dinge kenne, die du warscheinlich noch nie gesehen hast und in einem normalen Tutorial oder Einsteiger-Buch nicht findest.

            In diesem Sinne:

            var $msg = <<<HDS
            FG & HTH

            Tom2
            HDS;

            echo $msg;

            PS: Die Zuweisungsmethode für den $msg-String nennt sich übrigens Heredoc-Methode.

            --
            SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
            ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
            1. Hallo,

              $this verweist immer auf sich selbst, d.h. innerhalb einer Klasse auf die aktuelle Instanz eines Objektes. Lies am besten das gesammte Sprachreferenz-Kapitel der PHP-Doku durch...

              oder mal was in Java lesen, da ist das nämlich besser erklärt. In PHP ist die OOP noch etwas stiefmütterlich behandelt.

              Gruß, Andreas

              --
              <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
              http://was-ist-das.andreas-lindig.de
        3. Moin!

          nim am besten am anfang des scripts:

          global $variable1, $variable2;

          Ein Programmierstil mit "global" ist vermutlich das Schlimmste, was man sich antun kann. Erst recht bei Verwendung von Klassen, um die es hier geht, und die so ziemlich das entgegengesetzteste Gegenteil sein dürften.

          - Sven Rautenberg

          --
          "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
  2. Wenn in der Php.ini vom Provider register_globals=on steht, nicht

    1. Moin!

      Wenn in der Php.ini vom Provider register_globals=on steht, nicht

      Du verbreitest unzutreffende Informationen.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
  3. Hallo,

    Und muss ich wikrlich jede neue Variable mit var $bla initialisieren? zb auch in if Anweisungen?

    Die von Dir genannte Stelle steht im Kapitel zu OOP/Klassen.
    Das ist ein Sonderfall. Wenn Du nichts mit Klassen
    programmierst, ist diese Seite fuer Dich nicht relevant.

    Normalerweise musst Du keine Variablen initialisieren.

    Aber bevor Du sie verwendest, z.B. mit
    echo $meinevariable;
    solltest Du sicher sein, dass sie etwas enthalten.
    Z.B. indem Du mit
    if isset($meinevariable)
    nachpruefst.
    Das gilt besonders fuer Variablen/Parameter,
    die von aussen kommen:
    $_POST, $_GET, $_REQUEST, $_COOKIE

    Undefinierte Variablen fuehren je nach Situation
    und Konfiguration zu Warnungen, Fehlermeldungen
    oder Skript-Abstuerzen...

    Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
    1. Hallo,

      Sorry, unsorfaeltige Formulierung:

      solltest Du sicher sein, dass sie etwas enthalten.
      Z.B. indem Du mit
      if isset($meinevariable)
      nachpruefst.

      Du solltest pruefen, ob die Variable "existiert"
      bzw. "_gesetzt_ ist".
      (Sie kann auch leer sein.)

      http://www.php.net/manual/de/function.isset.php

      mfg, Thomas