echo $begrüßung;
Kamst du nicht ins Grübeln, wie man wohl aus Dezimalzahlen eindeutig und vor allem ohne großartige Rechnereien[*] ermitteln kann, ob eine bestimmte Zahl zur Bildung der Summe genutzt wurde, ohne die Bits ihrer Binärdarstellung zu beachten?
Dieser Satz hat mich ins Grübeln gebracht.
Die Werte der error_reporting-Konstanten sind alle (E_ALL mal ausgenommen) auffallend Ergebnisse von Zweierpotenzen. In Binärdarstellung ergeben sie
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
Wie zu sehen ist, ist immer genau ein Bit gesetzt, die anderen nicht. Fasst man zwei oder mehr Werte durch Addition oder OR-Verknüpfung zusammen bleiben die gesetzten Bits erhalten.
E_WARNING 2 000000000010
E_CORE_WARNING 32 000000100000
E_USER_WARNING 512 001000000000
546 001000100010
Man kann also eindeutig aus der 546 erkennen, dass E_WARNING, E_CORE_WARNING und E_USER_WARNING gemeint sind. Hätte man nur das Dezimalsystem zur Verfügung müsste man von der 546 alle definierten Werte, also 512, 256, 128, 64, 32, 16, 8, 4, 2 und 1 (1024 bis 2048 kann man sich sparen) der Reihe nach und vom größten zum kleinsten durchgehen und subtrahieren ... [viele Worte, die ich grad nicht ausformulieren will]. In Kurzform sieht das so aus:
- Der nächst kleinere Wert zu 546 ist 512, also E_USER_WARNING gemerkt und gerechnet: 546-512 = 34.
- 256, 128, 64 scheiden aus, weil sie größer als 34 sind.
- 32 passt, also E_CORE_WARNING gemerkt und gerechnet: 34-32 = 2
- 16, 8, 4 scheiden aus
- 2 passt, also E_WARNING gemerkt und gerechnet: 2-2 = 0
- 1 scheidet auch aus
Wie du siehst ist das viel Aufwand.
Und nun kannst du dir sicher auch denken, warum der Defaut-Wert von error_reporting in der php.ini-dist als E_ALL & ~E_NOTICE (AND NOT(bzw. Komplement)) dargestellt ist, wie sich die Bits bei dieser Rechnung verhalten und PHP anhand des Ergebnisses weiß, welche Fehler es anzeigen soll.
echo "$verabschiedung $name";