Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Variablendeklaration in PHP

Einklappen

Neue Werbung 2019

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

  • #16
    Danke für den Hinweis, auch für mich interessant.

    Kommentar


    • #17
      Hoppla, vertippt!
      Nicht & sondern |

      zwar E_ALL&~E_STRICT (zum expliziten Abschalten)
      aber E_ALL | E_STRICT (zum "Anschalten")
      phpinfo() sollte dann bei error_reporting den Wert 4095 anzeigen.

      Kommentar


      • #18
        Zitat von Bruchpilot
        einfach nur E_ALL | E_STRICT
        must auch erklären wieso ... das Binäre Oder Vernknüpft die Werte so das die Bits gesetzt sind die in min. 1 der beiden Werte gesetzt sind deshalb

        E_ALL | E_STRICT

        ps:
        Ein + Funktioniert übrigens auch zum Anschalten
        E_ALL (2047) 011111111111 | E_STRICT(204 100000000000 = (4095) 111111111111
        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

        Kommentar


        • #19
          Na schön. Und da das hier "PHP - Fortgeschrittene" ist, geht es noch etwas weiter.
          Nehmen wir die in der php.ini aufgeführten Konstanten und lassen sie untereinander dezimal und binär ausgeben

          Code:
          <?php
          $flags = array('E_ERROR','E_WARNING','E_PARSE','E_NOTICE','E_CORE_ERROR','E_CORE_WARNING',
          	'E_COMPILE_ERROR','E_COMPILE_WARNING','E_USER_ERROR','E_USER_WARNING','E_USER_NOTICE','E_ALL','E_STRICT');
          
          foreach($flags as $f) {
          	printf("%17s : %4d : %012s\n", $f, constant($f), decbin(constant($f)));
          }
          ?>
          (php Tag will mal wieder nicht, deshalb code)

          Code:
                    E_ERROR :    1 : 000000000001
                  E_WARNING :    2 : 000000000010
                    E_PARSE :    4 : 000000000100
                   E_NOTICE :    8 : 000000001000
               E_CORE_ERROR :   16 : 000000010000
             E_CORE_WARNING :   32 : 000000100000
            E_COMPILE_ERROR :   64 : 000001000000
          E_COMPILE_WARNING :  128 : 000010000000
               E_USER_ERROR :  256 : 000100000000
             E_USER_WARNING :  512 : 001000000000
              E_USER_NOTICE : 1024 : 010000000000
                      E_ALL : 2047 : 011111111111
                   E_STRICT : 2048 : 100000000000
          Die Werte, die in der Liste über E_ALL stehen, haben jeweils nur eine einzige 1 in der Binärdarstellung. Es sind einfache flags. Wenn man irgendeinen Wert hat, kann man nachsehen, ob in dessen Binärdarstellung an einer bestimmten Position auch eine 1 steht.
          Nehmen wir den Wert 75 : 000001001011
          Hat eine 1 an den Positionen von E_ERROR, E_WARNING, E_NOTICE und E_COMPILE_ERROR. Diese Flags sind gesetzt, diese Meldungen würden also bei error_reporting=75 bearbeitet werden. Die restlichen flags sind nicht gesetzt.
          Diese Verknüpfung von Bitwerten leistet der OR-Operator, dargestellt durch |
          E_ERROR|E_WARNING|E_NOTICE|E_COMPILE_ERROR=bin(100 1011)=75
          E_ALL ist der OR-Verknüpfte Wert aller einzelnen Flags - eben bis auf E_STRICT, das ein flag "oberhalb" von E_ALL setzt.
          => E_ALL|E_STRICT -> alle bisher in php für Meldungen definitierten Flags setzen.

          ~ dreht die Bits um.
          echo decbin(~E_CORE_ERROR); => 11111111111111111111111111101111
          An der Stelle, an der E_CORE_ERROR eine 1 hatte, steht nun eine 0, die restlichen Positionen sind 1.
          (Wie man hier sehen kann, werden Konstanten bei meinem php als 32-bit Werte definiert. Vollständig sieht E_CORE_ERROR also so aus:
          00000000000000000000000000010000
          aber die führenden Nullen können hier weggelassen werden)

          & stellt eine binäre UND-Verknüpfung dar. Nur an den Positionen, an denen beide Operanden eine 1 zu stehen haben, bleibt im Ergebins eine 1. Alle anderen Positionen werden auf 0 gesetzt.
          0 0 -> 0
          0 1 -> 0
          1 0 -> 0
          1 1 -> 1
          Code:
          E_ALL         : 011111111111
          ~E_CORE_ERROR : 111111101111
                          011111101111
          Das Ergebnis sieht aus wie E_ALL, bis darauf, dass das Bit von E_CORE_ERROR nicht mehr gesetzt ist.
          Und das jetzt mal für E_ALL&~E_STRICT
          Code:
          E_ALL     : 011111111111
          ~E_STRICT : 100000000000
                      011111111111
          Es kommt wieder genau E_ALL bei raus - unsinnige Operation.

          Kommentar


          • #20
            Bin beeindruckt
            Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

            Kommentar


            • #21
              Und dabei konnte ich noch mit einem Kunden telefonieren.
              Diese leise Tastatur macht sich einfach bezahlt

              Kommentar


              • #22
                &~ ist ein XOR oder?
                das wird leider nirgens gelisted das war mir zuvor auch noch nicht so klar
                Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                Kommentar


                • #23
                  l��t sich ja ganz liecht testen
                  PHP-Code:
                  <?php
                  echo 0;
                  echo 
                  1;
                  echo 
                  0;
                  echo 
                  1;
                  echo 
                  "\n";
                  echo 
                  & ~0;
                  echo 
                  & ~1;
                  echo 
                  & ~0;
                  echo 
                  & ~1;
                  ?>
                  Code:
                  0110
                  0010
                  Sieht nicht so aus, dass xor ein und-nicht ist.

                  Kommentar


                  • #24
                    hmm ok ich muss mir die Schreibweise dazu nochmal genau anschauen ... den Background dazu hab ich ja verstanden

                    Hast dazu evl. n guten Link? Weil das PHP-Manual ist im dem Punkt recht spärlich gehalten.

                    Aber merkwürdig das NAND - Ergebnis aus der Wiki sieht aber anders aus http://de.wikipedia.org/wiki/NAND-Gatter
                    Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                    Kommentar


                    • #25
                      NAND: NICHT(a UND b)
                      Vorhin ging es aber um: a UND (NICHT b)

                      Kommentar


                      • #26
                        Wieder was neues dachte zuvor das wäre das gleiche...
                        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                        Kommentar


                        • #27
                          Trotzdem: Technische Info stinkt *duck&wech*

                          Kommentar


                          • #28
                            aber wie gesagt an Links die das Thema speziel in Bezug auf PHP behandeln bin ich sehr interesiert

                            [edit] ok ~ = Nicht .... bin bisher immer davon ausgeangen das ! für Nicht steht aber das negiert ja nur.
                            Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                            Kommentar

                            Lädt...
                            X