Tach!
Moin!
E_ALL kombiniert alle Bits, mit Ausnahme von E_STRICT in den 5er PHP-Versionen kleiner 5.4. Beim Wert -1 sind sämntliche Bits gesetzt, auch solche, die für error_reporting keine Bedeutung haben. Man muss sich bei -1 aber keine Gedanken machen, welche PHP-Version man hat und welche Meldungen dessen E_ALL umfasst. Der Unterschied zu E_ALL ist aber effektiv nur das relativ unwichtige E_STRICT.
Die Kommentare zu den definierten E_*-Konstanten sagen, dass ~0 die bessere Methode ist, alle Bits zu setzen, weil das Zweierkomplement nicht zwingend immer funktionieren muss.
Das stimmt wohl, halte ich aber für ein theoretisches Argument. Zudem wolltest du wohl sagen, dass das Zweierkomplement nicht überall zur Darstellung negativer Zahlen angewendet wird. Denn wenn es verwendet wird, muss es überall funktionieren, sonst wäre dieses Verfahren nicht das Zweierkomplement. Da das Zweierkomplement aber die vorherrschende Methode ist, und das Einerkomplement mindestens zwei Nachteile hat, gehe ich nicht davon aus, letzteres auf den vorwiegend verwendeten Systemen zu finden.
Außerdem wird vermutet, dass das Setzen von undefinierten Bits in der Maske undefiniertes Verhalten zur Folge haben könnte.
Diese Aussage halte ich für Blödsinn. Wenn dem so wäre, müsste irgendwer im PHP-Code eine sehr ungewöhnliche Art, gesetzte Bits zu erkennen, verwenden. Und ein solches Verhalten müsste mit jeder Version korrigiert werden, die neue Fehlerklassen definiert und dafür neue Bits verwendet. Ich habe mir gerade mal im PHP-5.3.8-Code (abzüglich der tests-Verzeichnisse) alle Verwendungen von error_reporting angesehen und darin kein ungewöhnliches Bit-Prüfen und -Setzen gefunden.
dedlfix.