Malcolm Beck´s: Noch eine frage zu einer kleinen Klasse

Beitrag lesen

hi,

erstmal vielen Dank für die ausführliche Erklärung.

Man erstellt aber eine statische Methode (GibMirInstanz()) dazu, die man als public deklariert und die die Aufgabe hat, die eine einzige Instanz zu liefern, sie bei der ersten Verwendung vorher zu erzeugen und sich dann dieses erzeugte Objekt für die anderen Interessenten zu merken. Da diese statische Methode zur Klasse gehört, hat sie die Berechtigung, den private-Konstruktor aufzurufen.

Ich glaube, so etwas habe ich Gestern noch programmiert, S.u..

» class Menu {
»     function __construct($Title) {
»         $this->liste = "<p>$Title</p>";
»     }

Das sieht mir eher danach aus, als ob du mit der Klasse Daten verwalten willst und einige Methoden bereitstellen willst, um diese Daten zu be-/verarbeiten. Dann solltest du eher Objektmethoden verwenden, also keine statischen (die Klassenmethoden genannt werden).

Ich versuche es, nur ist dass ganze ja schon für einen Anfänger ziemlich kompliziert.

»   // Zugriff auf das Objekt[?]
»   $MyList = new Menu('Mein Titel');
»   echo $MyList->liste; // Ausgabe: <p>Mein Titel</p>
»   echo Menu::Level_1(); // Ausgabe: test level 1

Die Verwendung von statischen Methoden ist unabhängig von Instanzen. Du kannst also Menu::Level_1() aufrufen, ohne vorher mit new ein Objekt erzeugt zu haben. (Inwieweit die eine oder andere Vorgehensweise sinnvoll ist, kommt immer auf die Aufgabenstellung an.)

Ja, dass ist mir schon klar; das erzeugte Objekt benötige ich aber öfter, als die Statischen Methoden, daher dieses Konstrukt.
Ich benötige ein und die selbe ausgabe der Klasse drei mal und die Statische Funktion Beispielsweise ein mal.

Aber ich habe noch ein wenig weiter gegrübelt und einen „Error-handler“ für unvollständige Usereingaben geschrieben:

  class InputErrorCheck  
  {  
    var $error;  
  
    function __construct($array) {  
      if (is_array($array)) {  
        foreach ($array as $key) {  
          if (isset($_POST[$key]) AND empty($_POST[$key])) {  
            $this->error[] = $key;  
          }  
        }  
      }  
      else {  
        $this->error = false;  
      }  
    }  
  
    public static function errorMessage($array,$isKeyOf) {  
      if(is_array($array)) {  
        $val = '';  
          foreach ($array as $key)  {  
            if ($isKeyOf == 'message') {  
              $val .= ucfirst($key) . ' - ';  
            }  
            else if ($isKeyOf == 'css') {  
              $val .= '#' . $key . ', ';  
            }  
          }  
        $val = rtrim($val, ' - ');  
        $val = rtrim($val, ', ');  
        return $val;  
      }  
      else {  
        return false;  
      }  
    }  
  
  }

Aufruf:

    $MyErr = new InputErrorCheck(array('name','beitrag')); // Pflichtfelder definieren, rückgabewert steht als array in $MyErr->error zur verfügung  
  
    if ($MyErr->error) // wenn es einen fehler gibt, in Variable für die spätere Ausgabe speichern  
    {  
      $CSSNames = InputErrorCheck::errorMessage($MyErr->error, 'css') ; // Pflichtfelder Rot markieren, wenn nicht ausgefüllt  
  
      $MyErr->error = '<p class="error required_field">Füllen Sie bitte folgende Felder aus:<br /><em>' // User mitteilen, welche Felder Pflicht sind  
                    . InputErrorCheck::errorMessage($MyErr->error, 'message')  
                    . '</em></p>';  
    }  
  
  $ErrCSS = (isset($CSSNames))  
          ? "\n".'<style type="text/css">' . "$CSSNames {border-color:#F00;}</style>\n"  
          : '' ;  
  
  echo $MyErr->error;  

Ich weiss, mit einfachen Funktionen könnte ich das Eleganter lösen, aber dass ist endlich eine Klasse, durch die ich das Prinzip verstehen kann.
Verbesserungsvorschläge?

mfg

--
echo '<pre>'; var_dump($Malcolm_Beck`s); echo '</pre>';
array(2) {
  ["SELFCODE"]=>
  string(74) "ie:( fl:) br:> va:? ls:? fo:) rl:| n4:# ss:{ de:? js:} ch:? sh:( mo:? zu:("
  ["Meaningful"]=>
  string(?) "Der Sinn des Lebens ist deinem Leben einen Sinn zu geben"
}