Ankündigung

Einklappen
Keine Ankündigung bisher.

Zugriff: return Array->index

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zugriff: return Array->index

    Guten Tag,

    ich sehe derzeit den Wald vor lauter Bäumen nicht mehr, und könnte ein Wenig eure Hilfe brauchen.
    Ich habe mir eine Klasse geschrieben in welche eine Funktion einen Übergebenen String per RegEx prüft, und dann einen Array als $return zurück gibt.
    Auf dem Index 0 liegt ein boolen, welcher angibt, ob die Prüfung erfolgreich war oder nicht.
    Auf Index 1 ist ein String gespeichert, der im Falle von Index 0==false eine errormsg enthält.

    Nun ist mir jedoch nicht klar, wie ich diese Arrayindexes dann im späteren Code aufrufen kann.
    Ich hoffe darauf, dass mir einer von euch nen Weg aufzeigen kann, wie das klappt.

    Ich habe bisher versucht die Array-Indexes per checkInput(..)[0] bzw. checkInput(..)[1] aufzurufen. Aber das lief leider ins Leere hinaus.

    So long,
    Mahribar

    Klasse:
    PHP-Code:
    class Anmeldung {
        
        
    /**
         * Variablen initiieren
         */
        
    private static $regEx;
        public 
    $return;
        
        
    /**
         * Formulardaten auswerten per RegEx
         * 
         * @param String $methode zahl, email, keine
         * @param String $string Uebergabestring
         * @param String $feld Input-Feld-Titel
         * @return array $return [0] boolean true, false [1] String errormsg
         */
        
        
    public function checkInput($methode,$string,$feld) {
            
    // RegEx definieren
            
    self::$regEx["zahl"] = "'[0-9]+";
            
    self::$regEx["email"] = "[^@]+@.+\.[^.]+";
            
            
    // Uebergabestring ueberpruefen auf NUR Leerzeichen
            
    if ($string === "" || $string === " " || $string === "  ") {
                
    $return[0] = false;
                
    $return[1] = "Das Feld <b>".$feld."</b> enth&auml;lt keine Eingabe.";
            } else {
                
    // Uebergabestring je nach $methode per RegEx ueberpruefen
                
    switch ($methode) {
                    case 
    "zahl":
                        if (!
    preg_match(self::$regEx["zahl"], $string)) {
                            
    $return[0] = false;
                            
    $return[1] = "Deine Eingabe besteht <b>nicht</b> nur aus Zahlen. Dies ist hier jedoch erforderlich!";
                            break;
                        } else {
                            
    $return[0] = true;
                            
    $return[1] = "";
                            break;
                        }
                    case 
    "email":
                        if (!
    preg_match(self::$regEx["email"], $string)) {
                            
    $return[0] = false;
                            
    $return[1] = "Deine Eingabe hat <b>nicht</b> das Format einer Email-Adresse. Bitte korrigiere deine Eingabe!";
                            break;
                        } else {
                            
    $return[0] = true;
                            
    $return[1] = "";
                            break;
                        }
                    case 
    "keine":
                        
    $return[0] = true;
                        
    $return[1] = "";
                        break;
                }
            }
        }


  • #2
    glaube das geht erst seit php 5.4, aber man kann function($para)[3] machen, wenn die Funktion ein array zurückgibt, nur halt glaube erst seit 5.4.
    Ansonsten:
    PHP-Code:
    $array = function($para);
    $element $array[3]; 
    Fatal Error: Windows wird gestartet

    Wie administriert man ein Netzwerk: Beispiel

    Kommentar


    • #3
      Du returnest nichts.
      Falscher Bereich! -> PHP Einsteiger

      Zitat von Unlikus Beitrag anzeigen
      glaube das geht erst seit php 5.4, aber man kann function($para)[3] machen, wenn die Funktion ein array zurückgibt, nur halt glaube erst seit 5.4.
      Wäre in dem fall aber eher Kontraproduktiv da er die Funktion dann X mal ausführen müsste, für jeden Index den er aus dem Array braucht.
      [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

      Kommentar


      • #4
        Du meinst Sowas? https://wiki.php.net/rfc/functionarraydereferencing
        (Status: Implemented in PHP 5.4)

        Ansonsten:

        PHP-Code:
        $array yourFunction(..);
        echo 
        $array[3]; 
        Zuerst muss deine Funktion aber erstmal was zurückgeben! -> return

        LG
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von Unlikus Beitrag anzeigen
          Ansonsten:
          PHP-Code:
          $array = function($para);
          $element $array[3]; 
          Wundervoll. So hat es funktioniert. Vielen Dank.

          PHP-Code:
          <?php

          require("classes/Anmeldung.php");

          $test = new Anmeldung();

          $check $test->checkInput("email""123""test");
          var_dump($check[0]);

          Zitat von tkausl Beitrag anzeigen
          Falscher Bereich! -> PHP Einsteiger
          Verzeih' mir dies. Da es hier um OOP geht, dachte ich nicht, dass dies wirklich "Einsteiger" betreffen würde.

          Zitat von tkausl Beitrag anzeigen
          Du returnest nichts.
          Ich hatte mehrfach herumprobiert und unter anderem noch eine getData()-function geschrieben. der return war schon mal da. Danke für den Hinweis



          Alles in Allem, danke ich euch vielmals. Ich hätte nicht gedacht, nach nur wenigen Minuten schon so viele Antworten zu erhalten. *kniks mach*

          So long,
          Mahri

          Kommentar


          • #6
            Wenn du > 5.4 hast müsste es so auch gehen - natürlich nur wenn du auch korrekt was zurückgibst.

            PHP-Code:
            $check $test->checkInput("email""123""test")[0]; 
            Auch wenn das irgendwie hässlich aussieht
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Das geht leider nicht, da der Webserver noch auf PhP Version 5.3.19 läuft und ich daran derzeit nichts ändern kann.
              Dennoch ist der Hinweis hier wohl gut aufgehoben für spätere Hilfefindungen. Danke dir!

              Kommentar


              • #8
                wieso machste nen array:
                PHP-Code:
                $return = [boolString]; // schreibt man das so ? 
                gibt doch
                -nur einen error oder true zurück
                -nur einen error oder einen leeren string zurück
                -true/false zurück und ziehe dir den error über anmeldung->getError();

                aber ist deine sache.

                Kommentar


                • #9
                  Zitat von hausl Beitrag anzeigen
                  Wenn du > 5.4 hast müsste es so auch gehen - natürlich nur wenn du auch korrekt was zurückgibst.

                  PHP-Code:
                  $check $test->checkInput("email""123""test")[0]; 
                  Auch wenn das irgendwie hässlich aussieht
                  Nicht nur das. Wenn ein zweiter Aufruf dann die Meldung abholen soll,
                  wird nochmal komplett die ganze Methode abgearbeitet.
                  Wenn diese zeitaufwendig ist, sollte das unterbleiben.

                  Cooler Workaround für PHP < 5.4

                  PHP-Code:
                  function test(){
                    return array(
                  true,'Meldung');
                  }

                  list(
                  $ok,$msg) = test();

                  var_dump($ok,$msg);
                  //bool(true) string(7) "Meldung" 
                  Die funktion wird hier nur 1x aufgerufen !
                  Funktioniert dito auch für Methodenaufrufe.

                  LG jspit

                  Kommentar


                  • #10
                    Das Ganze etwas geschmeidiger

                    PHP-Code:

                        
                    class Anmeldung {

                            public function 
                    checkInput($methode$string$feld) {

                                
                    // Uebergabestring ueberpruefen auf NUR Leerzeichen
                                
                    if ($string === '' || $string === ' ' || $string === '  ') {
                                    throw new 
                    InvalidArgumentException('Das Feld <b>'$feld .'</b> enth&auml;lt keine Eingabe.');
                                } else {
                                    
                    // Uebergabestring je nach $methode per RegEx ueberpruefen
                                    
                    switch ($methode) {
                                        case 
                    'zahl':
                                            if (!
                    preg_match("'[0-9]+"$string)) {
                                                throw new 
                    InvalidArgumentException('Deine Eingabe besteht <b>nicht</b> nur aus Zahlen. Dies ist hier jedoch erforderlich!');
                                            }
                                            break;
                                        case 
                    'email':
                                            if (!
                    preg_match("[^@]+@.+\.[^.]+"$string)) {
                                                throw new 
                    InvalidArgumentException('Deine Eingabe hat <b>nicht</b> das Format einer Email-Adresse. Bitte korrigiere deine Eingabe!');
                                            }
                                            break;
                                    }
                                }
                            }
                        }
                        
                        try
                        {
                            (new 
                    Anmeldung())->checkInput('email''123''test');
                        }
                        catch(
                    InvalidArgumentException $exception)
                        {
                            
                    // auf fehlerhafte Eingabe reagieren
                        
                    }

                        
                    // alles dufte, weiter im Ablauf 

                    Kommentar


                    • #11
                      Zitat von SirSnyder Beitrag anzeigen
                      Das Ganze etwas geschmeidiger
                      Eine Exception als Rückgabe zu missbrauchen ist nicht geschmeidig. Exceptions sind zur Ausnahmebehandlung und nicht für die Regel. Die Aufgabe einer Funktion wie checkInput() ist zu prüfen ob die Eingabe korrekt oder nicht ist. Wenn die Eingabe nicht korrekt ist kann das keine Exception sein. Das ist dann true oder false, ein Array mit Fehler, ein Rückgabeobjekt, oder was auch immer.

                      Der Sinn von Exceptions ist sowas:
                      PHP-Code:
                      public function checkInput($methode$string$feld) {
                                  [...]
                                      switch (
                      $methode) {
                                          case 
                      'zahl':
                                              [...]
                                              break;
                                          case 
                      'email':
                                              [...]
                                              break;
                                          default:
                                              throw new 
                      Exception();

                                      }
                                  [...]

                      Oder

                      PHP-Code:
                      class Anmeldung {
                           private 
                      $daten;
                           public function 
                      setInput($daten) { $this->date n$daten; };
                           
                           public function 
                      validate() {
                                
                      //prüfe daten
                                
                      return true/false//oder array mit errors, oder objekt
                           
                      }

                           public function 
                      execute() {
                                if(!
                      $this->validate()) {
                                     throw new 
                      Exception();
                                }
                                
                                
                      //irgendwas machen
                           
                      }
                      }

                      //wenn du der meinung bist die daten sind richtig, z.B. import aus einer CSV
                      try {
                      $anmeldung = new anmeldung();
                      $anmeldung->setInput(array('mail' => 'iskeinemauil''name' => ''));
                      $anmeldung->execute();
                      } catch (
                      Exception $e) {
                         echo 
                      'fehler';
                      }

                      //oder wenn du falsche daten erwartest, wie z.B. aus einem Formular
                      $anmeldung = new anmeldung();
                      $anmeldung->setInput(array('mail' => 'iskeinemauil''name' => ''));

                      if(
                      $anmeldung->validate()) {
                           
                      //formular wieder darstellen mit fehlermeldung
                      } else {
                           
                      $anmeldung->execute();

                      Kommentar

                      Lädt...
                      X