~TRUE: ~FALSE

Hallo,

Wollte mal fragen ob ich der einzige bin der die Reaktion von PHP auf
[code=php]
~FALSE
[/code]
wie ein Bug vorkommt (irgendwann wer den falschen Fehlercode (Severity) eingesetzt?!)

Wo ist jetzt der genaue Unterschied zu zb. FALSE<<1.
Das geht genau so wenig oder viel.)?

  1. Hallo,

    Wollte mal fragen ob ich der einzige bin der die Reaktion von PHP auf

    ~FALSE

    
    > wie ein Bug vorkommt (irgendwann wer den falschen Fehlercode (Severity) eingesetzt?!)  
      
    möglich. Das Verhalten ist jedenfalls völlig in Ordnung, ich zitiere aus dem [Handbuch](http://www.php.net/manual/en/language.operators.bitwise.php):  
      
        "Bitwise operators allow evaluation and manipulation  
         of specific bits within an integer."  
      
    Daher finde ich  
      
    ~~~php
        $result = ~false;  
    # Ausgabe: Fatal error: Unsupported operand types in [...] on line [...] 
    

    und

    $result = ~((int)false);  
    var_dump($result);  
    # Ausgabe: int(-1)  
    
    

    völlig in Ordnung. Welches Ergebnis erwartest Du?

    Freundliche Grüße

    Vinzenz

    1. $result = ~((int)false);

      var_dump($result);

      Ausgabe: int(-1)

        
      Da erwarte ich auch nichts anderes.)  
        
      Ich würde nur keinen Fatalen Fehler bei ~FALSE erwarten.  
      Ich würde bei ~FALSE genau TRUE erwarten, (-1) wäre auch Ok, selbst ein RECOVERABLE\_ERROR wäre Ok.  
      Ein fataler Scriptabbruch ist IMHO aber völlig unangemessen.
      
      1. Tach!

        Ich würde bei ~FALSE genau TRUE erwarten, (-1) wäre auch Ok, selbst ein RECOVERABLE_ERROR wäre Ok.

        Warum erwartest du das? PHP ist nicht $andere_sprache. Es besteht kein Zwang, dass ein anderswoher bekanntes Verhalten grundsätzlich kopiert werden muss. Was spricht denn gegen eine einfache Negation? Das ist neben dem Vergleichen auf Gleichheit (also = und Konsorten, aber nicht < oder >) und logischen Verknüpfungen auch der einzig sinnvolle Operator für boolesche Werte. Es ist eher ein logischer Fehler, wenn mit booleschen Werten Rechen- und/oder Bitoperationen vorgenommen werden können. Das hat sich sicher nur als "normal" eingebürgert, weil die Repräsentation boolescher Werte in vor langer Zeit erfundenen Systemen mit Zahlenwerten vorgenommen wurde (was ja bei den begrenzten Kapazitäten der damaligen Systeme durchaus sinnvoll war).

        dedlfix.

        1. Tach!

          Ich würde bei ~FALSE genau TRUE erwarten, (-1) wäre auch Ok, selbst ein RECOVERABLE_ERROR wäre Ok.

          Warum erwartest du das?

          Weil das schlicht konsequent wäre!?

          All das macht keinen bis wenig Sinn und führt zu keinen Fehlern:

          ~INF
          ~NAN
          FALSE << TRUE
          FALSE & TRUE
          ~'123'

          Letzteres ist sogar gewollt!