Danke für den Hinweis, auch für mich interessant.
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] Variablendeklaration in PHP
Einklappen
Neue Werbung 2019
Einklappen
X
-
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
-
Zitat von Bruchpiloteinfach nur E_ALL | E_STRICT
E_ALL | E_STRICT
ps:
Ein + Funktioniert übrigens auch zum Anschalten
E_ALL (2047) 011111111111 | E_STRICT(204 100000000000 = (4095) 111111111111Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
Kommentar
-
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))); } ?>
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
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
Und das jetzt mal für E_ALL&~E_STRICTCode:E_ALL : 011111111111 ~E_STRICT : 100000000000 011111111111
Kommentar
-
Und dabei konnte ich noch mit einem Kunden telefonieren.
Diese leise Tastatur macht sich einfach bezahlt
Kommentar
-
l��t sich ja ganz liecht testenPHP-Code:<?php
echo 0 ^ 0;
echo 0 ^ 1;
echo 1 ^ 0;
echo 1 ^ 1;
echo "\n";
echo 0 & ~0;
echo 0 & ~1;
echo 1 & ~0;
echo 1 & ~1;
?>Code:0110 0010
Kommentar
-
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-GatterGewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
Kommentar
-
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
Kommentar