PHP-Beginner: Abfrage auf "leer"

Hello,

Wenn ich eine Funktion

function myfunk ($staerke, $groesse, $farbe) {.....}

aufrufe mit z.B. myfunk('fett', '', 'grün');
Wie frage ich sinnvollerweise ab, ob $groesse einen Wert hat oder nichts wie in dem Beispiel?

Ich habe gefunden
isempty($groesse) und
$groesse == ''.
Was ist besser oder gibt es weitere Möglichkeiten?

  1. Was ist besser oder gibt es weitere Möglichkeiten?

    Es gibt zahlreiche andere. Welche besser ist kann man nur mit Kenntnis der Aufgabe bestimmen:

    Nur zwei Beispiele:

    Erwartest Du eine ganze Zahl von 16 bis 66 erwartest, dann prüfe darauf:

    # …
    if ( ! 
      ( is_integer( $groesse ) 
        and $groesse >= 16
        and $groesse <= 66
      ) 
    ) {
       trigger_error(
          'keine oder falsche Größenangabe: "' . $groesse . '"',
          E_USER_NOTICE
       );
       return false; 
    }
    # …
    

    Erwartest Du etwas wie xs, s, m, l, xl, xxl xxxl:

    # …
    $allowed=[ 'xs', 's', 'm', 'l', 'xl', 'xxl', 'xxxl' ];
    
    $groesse = strtolower( $groesse );
    
    if (! in_array( $groesse, $allowed ) {
       trigger_error(
          'keine oder falsche Größenangabe: "' . $groesse . '"',
          E_USER_NOTICE
       );
       return false;
    }
    # …
    

    Am besten kapselst Du derlei in Funktionen oder Objektmethoden.

    1. Erwartest Du eine ganze Zahl von 16 bis 66 erwartest, dann prüfe darauf:

      Ich erwarte nur, lieber Raketenwilli, ob der Parameter einen Wert enthält oder nicht, also '' oder nicht ''.

      Erwartest Du etwas wie xs, s, m, l, xl, xxl xxxl:

      Ich meine, ich hätte dies klar ausgedrückt!

      Am besten kapselst Du derlei in Funktionen oder Objektmethoden.

      Funktionen oder Objektmethoden zur Ermittlung ob Wert = "" oder nicht ""?

      1. Hallo,

        Ich meine, ich hätte dies klar ausgedrückt!

        Du hast ganz klar gefragt, "was ist besser, oder gibt es andere Möglichkeiten?". Das hat Willi dir sogar in zwei Varianten beantwortet.

        Ob etwas ganz klar ausgedrückt ist, hängt sehr stark davon ab, ob man das selbst beurteilt oder es jemand anders tut.

        Gruß
        Kalk

        1. Ja, was ist besser zu fragen ob "" oder nicht "" als die beiden beschriebenen Varianten oder gibt es noch andere Varianten (nat. für den genannten Fall), d.h. doch nicht, dass ich auf bestimmte Werte abfragen will. Ich fürchte, ich bin hier im falschen Film! Tschüs


          1. 1.

            Was du [wahrscheinlich] suchst ist folgendes

            function myfunk ($staerke, $groesse, $farbe) {
            		if (!$groesse) {
            			echo "Größe nicht angegeben.";
            		} else {
            			echo "Größe angegeben.";
            		}
            	}
            	
            	myfunk("fett","","grün");
            

            2.

            Dir ist schon klar, dass Leute wie Raketenwilli dir ihre Freizeit kostenlos zur Verfügung stellen? Vielleicht solltest du mal bei einer Webagentur anzufragen, was die so überschlagsmäßig für einen Stundensatz verlangen.

            Ich bin in diesem Forum zu 90% als Fragesteller unterwegs und - ja - Missverständnisse passieren.

            Wie viele Foren kennst du aber noch, wo du frei von der Seele weg deinen Kummer berichten kannst, ohne dafür einen Identitätsstriptease in Form einer Anmeldung hinzulegen (ohne Garantie auf zufriedenstellende Hilfe).

            Solche geistigen Nackerbatzerl wie du (tut mir leid, liebe Mods, aber wenn's doch stimmt) sind letztlich dafür verantwortlich, dass vielleicht der freie Zugang irgendwann gekappt wird - also zeige nächstes Mal vielleicht ein WENIG mehr Respekt (...mal ganz abgesehen davon, dass du mir bei DIESEM Problem NICHT weißmachen kannst, vor deinem Posting selbst nur IRGENDWELCHE Recherchen angestellt zu haben)

            LG,

            Christian

      2. Ich meine, ich hätte dies klar ausgedrückt!

        Dann bist Du auch in Kommunikation ein „Beginner“. Du hattest ausdrücklich und auch wortwörtlich nach „besseren“ Lösungen gefragt.

        Du hast zwei Beispiele für bessere Lösungen bekommen. Ob im Input „irgendwas“ steht reicht nämlich beim Programmieren regelmäßig nicht.

        1. Eine Funktion oder ein Objekt um zu wissen, ob a gleich "" oder a ungleich "", mit Verlaub, das ist wohl ein ganz klein wenig übertrieben!

          1. Eine Funktion oder ein Objekt um zu wissen, ob a gleich "" oder a ungleich "", mit Verlaub, das ist wohl ein ganz klein wenig übertrieben!

            Ich habe geschrieben, dass Du die Validierung übergebener Werte am besten in Funktionen oder Objektmethoden (!=Objekten) kapselst. „setter“ (Methoden zum Eintragen von Werten in Objekteigenschaften) sind geradezu ein „Klassiker“ für eine solche, von mir gezeigte Validierung.

            Ich habe nicht geschrieben, dass die von Dir benutzte Funktion(!) empty() nachteilig wäre. Nur ist halt genau diese Funktion empty() Deiner eigenen, oben wieder gegebenen Auffassung nach übertrieben…

            Du hast eine ordentliche und absolut zielführende Antwort bekommen und ich verstehe nicht, was Du Dir hier warum herausnimmst.

  2. Lieber PHP-Beginner,

    function myfunk ($staerke, $groesse, $farbe) {.....}
    [...]
    aufrufe mit z.B. myfunk('fett', '', 'grün');

    also wird für den Parameter $groesse ein Leerstring übergeben.

    Wie frage ich sinnvollerweise ab, ob $groesse einen Wert hat oder nichts wie in dem Beispiel?

    Die Variable hat immer einen Wert, die Frage ist nur „von welchem Typ“ und wie er genau(!) aussieht.

    Ich habe gefunden
    isempty($groesse) und
    $groesse == ''.

    Du hast in PHP eine automatische Typumwandlung. Der Integer-Wert 0 entspricht z.B. bei losem Vergleich (doppeltes Istgleichzeichen) einem Leerstring. Dein Code würde bei einer Größe von 0 so tun, als wäre kein Wert übergeben worden. Prüft man mit einem dreifachen Istgleichzeichen, dann prüft man auch auf den Datentyp:

    echo 0 ==  '' ? 'gleich' : 'verschieden'; // gleich
    echo 0 === '' ? 'gleich' : 'verschieden'; // verschieden
    

    Wenn myfunk() so geschrieben ist, dass beliebige Werte in $groesse keine unerwarteten Funktionalitäten verursachen können (Sicherheitsproblematik!!), dann reicht wohl empty() oder ein loser Vergleich mit einem Leerstring. Wenn aber zwingend zwischen dem Wert 0 und einem Leerstring unterschieden werden muss, dann benötigst Du eine feinere Abfrage, wie sie schon Raketenwilli mit is_integer() vorgeführt hat.

    Liebe Grüße

    Felix Riesterer