PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: bitweise hochzählen?


MadMan2k
2005-01-07, 19:18:43
ich sehe manchmal folgende Konstrukte


define('PEAR_ERROR_RETURN', 1);
define('PEAR_ERROR_PRINT', 2);
define('PEAR_ERROR_TRIGGER', 4);
define('PEAR_ERROR_DIE', 8);
define('PEAR_ERROR_CALLBACK', 16);
define('PEAR_ERROR_EXCEPTION', 32);


wie man sieht wird hier Bitweise hochgezählt - aber warum?
ergeben sich dadurch irgendwie Performancevorteile?

Minos
2005-01-07, 21:31:24
wenn das flags oder ähnliches sind hat das den vorteil das man die mit OR (logisches oder, ka wie das unter php geht) kombinieren kann...

Kant
2005-01-07, 21:40:05
ich sehe manchmal folgende Konstrukte


define('PEAR_ERROR_RETURN', 1);
define('PEAR_ERROR_PRINT', 2);
define('PEAR_ERROR_TRIGGER', 4);
define('PEAR_ERROR_DIE', 8);
define('PEAR_ERROR_CALLBACK', 16);
define('PEAR_ERROR_EXCEPTION', 32);


wie man sieht wird hier Bitweise hochgezählt - aber warum?
ergeben sich dadurch irgendwie Performancevorteile?

Die Definitionen dienen in erster Linie der Vereinfachung des Programmierens. Denn beim Lesen des Codes ist

PEAR::setErrorHandling(PEAR_ERROR_DIE);

natürlich einfacher zu lesen (und auch zu verstehen), als

PEAR::setErrorHandling(8);

Und Integer Übergaben mit definierten Werten sind natürlich deutlich effizienter als ein String-Parsing bei jedem Funktionsaufruf.


Das ist natürlich nur ein Grund für die Definitionen an sich, nicht für das bitweise ansteigen dieser. Dieses ansteigen liegt in der Unabhängigkeit der Werte voneinander begründet. Jeder Wert ist exakt einem bit zugeordnet, und lässt sich so schalten, bzw abfragen ohne die restlichen bits zu verändern.

Theoretisch könnte ich ihm auch ein

PEAR::setErrorHandling(PEAR_ERROR_DIE | PEAR_ERROR_PRINT);

übergeben, was er als integer 10 interpretiert. (Würde in dem PEAR Fall vermutlich keinerlei Sinn geben, nur als Bsp für die bits gemeint.)

MadMan2k
2005-01-08, 13:14:34
ok, danke :)