Lily: OOP Frage

Hi,
seit zwei Tagen beschäftige ich mich mit der Objekt orientierten Programmierung. Nachdem ich nun sehr viel theorie gelesen habe, wollte ich meine erste Klasse machen.

Habe also versucht eine Klasse zu erstellen, die prüft ob die POST Daten von dem eingestellten Feld gesendet worden.

Der Code der dann dabei entstanden ist funktioniert zu meiner Freude auch... (nach sehr viel herumprobieren)

Meine Fragen sind nun:
1. Ist der Code so richtig aufgebaut?

2. Ich habe ja die Variable var $meldung; definiert. Ich dachte dies muss ich machen, weil ich das Objet $this->meldung erstellt habe. Wenn ich diese Variable jedoch lösche funktioniert es trotzdem. Warum?

3. und letzte Frage:
Wenn ich Funktionen richtig verstanden habe, gibt z.B. return $fehler die Daten aus (wie echo), die die Variable enthält.

also habe ich folgendes probiert:

  
[...]  
$meldung = "<div class=\"fehler\">".$fehler."</div>";  
return meldung;  
[...]  

Es funktioniert aber nicht... auch hier warum?

So sieht der aktuelle Code aus:

  
 class Fehler {  
  
 var $meldung;  
  
  function zeigefehler($wert, $fehler) {  
  
  if (isset($_POST['submit_x']) && isset($_POST['submit_y'])) {  
  if (empty($_POST[$wert])) {  
  $this->meldung .= "<div class=\"fehler\">".$fehler."</div>";  
  }  
  } //isset($_POST['submit_x']) && isset($_POST['submit_y'])  
  
  }  
  
 }  
  
$test = new Fehler();  
$test->zeigefehler("name", "Bitte tragen Sie einen Namen ein.");  
$test->zeigefehler("domain", "Bitte tragen Sie eine Domain ein.");  
echo $test->meldung;  

Danke für eure Hilfe!

  1. Hallo!

    Meine Fragen sind nun:

    1. Ist der Code so richtig aufgebaut?

    Ich bin zwar nicht so der Crack, was OOP oder PHP angeht, aber er sieht (zumindest in meinen Augen) ganz ordentlich aus.

    1. Ich habe ja die Variable var $meldung; definiert. Ich dachte dies muss ich machen, weil ich das Objet $this->meldung erstellt habe. Wenn ich diese Variable jedoch lösche funktioniert es trotzdem. Warum?

    Ich schätze, weil man bei PHP die Variablen nicht initialisieren muss. Besser ist es, wenn du deine Variable trotzdem initialisierst, weil du dir sonst einen schlechten Stil angewöhnst.

    1. und letzte Frage:
      Wenn ich Funktionen richtig verstanden habe, gibt z.B. return $fehler die Daten aus (wie echo), die die Variable enthält.

    Das hast du falsch verstanden. Return gibt die Daten nur zurück. Was du dann damit machst (ob du sie ausgibst, ignorierst, oder sonstwie weiter verarbeitest) ist ziemlich egal.

      
    class fehler  
    {  
      # viel Code  
      return "Bitte irgendwas eingeben!";  
    };  
      
    $test = new fehler("irgendwelche", "Parameter");  
    echo $test;  
    
    

    Ich hab schon länger nicht mehr mit PHP gearbeitet, aber ich glaube, dass es so laufen müsste.

    ciao, ww

    --
    Schäuble:
      "Wir können alles. Außer Rechtsstaat."
    1. Hallo ww,

        
      
      > class fehler  
      > {  
      >   # viel Code  
      >   return "Bitte irgendwas eingeben!";  
      > };  
      >   
      > $test = new fehler("irgendwelche", "Parameter");  
      > echo $test;  
      > 
      
      

      Das geht schon mal gar nicht.
      Die Methodenaufrufe müssen in Funktionen der Klasse untergebracht werden - und nicht in der Klasse selbst.

      return dient zur Rückgabe eines Wertes einer Funktion.

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      1. Hallo!

        Das geht schon mal gar nicht.
        Die Methodenaufrufe müssen in Funktionen der Klasse untergebracht werden - und nicht in der Klasse selbst.

        Stimmt. Danke. Hab ich vergessen so hinzuschreiben.

        return dient zur Rückgabe eines Wertes einer Funktion.

        Das weiß ich. Ich wollte nur zeigen, dass das return irgendwo innerhalb der Klasse stehen soll. Dass es dabei zu Denkfehlern¹ kommen kann, daran habe ich nicht gedacht.

        ciao, ww

        ¹ so wie ich ihn gemacht habe :)

        --
        Schäuble:
          "Wir können alles. Außer Rechtsstaat."
      2. Hallo,

        Die Methodenaufrufe müssen in Funktionen der Klasse untergebracht werden

        Klassen haben keine Funktionen, sondern Methoden.

        Jeena

        1. Hallo Jeena.

          Die Methodenaufrufe müssen in Funktionen der Klasse untergebracht werden
          Klassen haben keine Funktionen, sondern Methoden.

          „Funktionen der Klasse“ ≙ „Methoden“

          Einen schönen Freitag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
    2. echo $begrüßung;

      1. Ich habe ja die Variable var $meldung; definiert. Ich dachte dies muss ich machen, weil ich das Objet $this->meldung erstellt habe. Wenn ich diese Variable jedoch lösche funktioniert es trotzdem. Warum?

      Ich schätze, weil man bei PHP die Variablen nicht initialisieren muss.

      Richtig. PHP benötigt auch bei Klassen/Objekten keine anderen Handlungen, die eine Variable bekannt machen, außer dem erstmaligen Schreibzugriff.

      Besser ist es, wenn du deine Variable trotzdem initialisierst, weil du dir sonst einen schlechten Stil angewöhnst.

      var $variable; ist keine Initialisierung sondern nur eine Deklarierung. Initialisierung ist die erstmalige Zuweisung eines Wertes. Wenn Deklarierung und Initialisierung zusammen erledigt werden nennt man das Definieren: var $variable = wert;

      Das Schlüsselwort var ist aber alter PHP4-Stil und sollte für neue, auf PHP 5 basierende Proejte nicht mehr verwendet werden, sondern die Zugriffsmodifikatoren public, protected oder private.

      "Schlechter Stil" ist eine Sache. Eine andere ist, dass PHP das "nette" Feature register_globals kennt. Beides zusammengenommen (nicht initialisierte Variablen (Lesezugriffe vor initialisierendem Schreibzugriff) und register_globals=on) ergibt eine Sicherheitslücke.

      echo "$verabschiedung $name";