Andreas Görtz: Bitfield in PHP ? Wie ?

Beitrag lesen

Hi,

Mein Problem: ich stehe da gerade ein bißchen neben mir. :)
Wie definiere ich die Modes ?

die einzelnen Flags entsprechen einer Bit-Position in einer Ganzzahl. Ist das entsprechende Bit = 1, ist das Flag gesetzt. D.h., deine "Modes" müssen einer Bit-Position entsprechen:

define('MODE_DEFINE1', 1);
define('MODE_DEFINE2', 2);
define('MODE_DEFINE3', 4);
define('MODE_DEFINE4', 8);
usw...

wenn du nun

$interface->setMode(MODE_DEFINE1 | MODE_DEFINE2);

aufrufst, übergibst du der Methode setMode die Zahl 3, die dann in der Ganzzahl gespeichert werden muss.

Wie lese ich die übergebenen Werte aus ?

In der Methode setMode()? Eigentlich gar nicht. Du speicherst einfach z.B. durch

$this->mode = $uebergabe;

die Übergabe in besagter Ganzzahl, hier $interface->mode. Diese Ganzzahl entspricht nun der Zahl 3, da das 1er- und das 2er-Bit gesetzt sind. Ob ein Bit gesetzt ist, fragst du dann ab, indem du eine &-Operation ausführst:

MODE_DEFINE1 ist nur gesetzt, wenn (MODE_DEFINE1 & $interface->mode) nicht 0 ergibt.

Gruß,
Andreas.