Ankündigung

Einklappen
Keine Ankündigung bisher.

Validate filters, falscher return Wert

Einklappen

Neue Werbung 2019

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

  • Validate filters, falscher return Wert

    Hi,

    laut Doku (http://www.php.net/filter.filters.validate) erwarte ich hier bei FILTER_VALIDATE_BOOLEAN mit FILTER_NULL_ON_FAILURE ein NULL als Ergebnis.

    Warum ergibt das hier dann bool(false) zurück (überseh ich oder versteh ich was falsch?!)?

    PHP-Code:
    <?php

    var_dump
    (filter_var(new \stdClass(), FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE));

    ?>
    Schon mal Danke für eine morgendliche Erleuchtung.

    PHP Version: 5.5.xx

    mfg wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

  • #2
    Zitat von http://de2.php.net/filter.filters.validate
    FILTER_VALIDATE_BOOLEAN ....
    FILTER_NULL_ON_FAILURE is set, FALSE is returned only for "0", "false", "off", "no", and "", and NULL is returned for all non-boolean values.
    Ich frag mich, wie kann bei validate bolean ein NON-bolean value rauskommen?

    Kommentar


    • #3
      Ich frag mich, wie kann bei validate bolean ein NON-bolean value rauskommen?
      gute Frage
      while (!asleep()) sheep++;

      Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

      Kommentar


      • #4
        Zitat von moma Beitrag anzeigen
        wie kann bei validate bolean ein NON-bolean value rauskommen?
        Das gilt in diesem Falle ja nur in Verbindung mit dem gesetzten Flag.


        Ansonsten dürfte folgendes relevant sein: https://github.com/php/php-src/blob/...er.c#L376-L386.

        Kommentar


        • #5
          NULL als Returnwert in Verbindung mit dem Flag FILTER_NULL_ON_FAILURE macht schon Sinn, denn wie soll ich sonst einen falschen Inputtyp diagnostizieren, wenn true und false echte Returnwerte darstellen.
          Scheinbar wird hier ein Objekt falsch erkannt.
          In älteren Versionen (5.3.8 ) sind da noch ganz andere Böcke:
          PHP-Code:
          var_dump(filter_var(falseFILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE));
          //Output: NULL 

          Kommentar


          • #6
            @jspit

            Ein Objekt wird nicht falsch erkannt, sondern erhält eine Sonderbehandlung. Das geht wohl aus folgendem Bug-Report hervor: https://bugs.php.net/bug.php?id=49274

            Wobei man sich auch nicht ganz sicher ist, wie es eigentlich sein sollte, siehe https://bugs.php.net/bug.php?id=67167

            Kommentar


            • #7
              Für Objekte erwarte ich gleiche Ergebnisse wie bei Arrays, eine Sonderbehandlung von Objekten macht für mich keinen Sinn:
              PHP-Code:
              var_dump(
                
              filter_var(array(1), FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var(array(0), FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var(array(15), FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE)
              ); 
              //NULL NULL NULL 
              Resultate bei Skalaren:
              PHP-Code:
              var_dump(
                
              filter_var("Yes"FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var("No"FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var("Murx"FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE)
              );  
              //bool(true) bool(false) NULL

              var_dump(
                
              filter_var(1FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var(0FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var(15FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE)
              );  
              //bool(true) bool(false) NULL 
              Die obigen Ergebnisse sind für mich stimmig, das Verhalten bei Anlieferung von Objekten passt nicht ins Bild:
              PHP-Code:
              var_dump(
                
              filter_var((object)1FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var((object)0FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE),
                
              filter_var((object)15FILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE)
              );  
              // bool(false) bool(false) bool(false) 

              Kommentar


              • #8
                NULL als Returnwert in Verbindung mit dem Flag FILTER_NULL_ON_FAILURE macht schon Sinn, denn wie soll ich sonst einen falschen Inputtyp diagnostizieren, wenn true und false echte Returnwerte darstellen.
                Scheinbar wird hier ein Objekt falsch erkannt.
                In älteren Versionen (5.3.8 ) sind da noch ganz andere Böcke:
                Ok, also hatte ich die Doku dementsprechend nicht falsch verstanden!

                Aus dem bug Report gibt es folgenden interessanten Output je nach PHP Version:

                http://3v4l.org/oFCpE

                Die obigen Ergebnisse sind für mich stimmig, das Verhalten bei Anlieferung von Objekten passt nicht ins Bild:
                Sehe ich genauso. Siehe auch den gerade geposteten Link.

                mfg wolf29
                while (!asleep()) sheep++;

                Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                Kommentar

                Lädt...
                X