Bitfield in PHP ? Wie ?
Stefan
- php
0 Andreas Görtz0 Stefan
Tach zusammen,
ich möchte ein oder mehrere beliebige Flags setzen, in dem ich eine Funktion in dieser Art aufrufe:
$interface->setMode(MODE_DEFINE1 | MODE_DEFINE2);
Diese Art der Variablen-Übergabe findet sich ja auch in einigen PHP-Funktionen.
Mein Problem: ich stehe da gerade ein bißchen neben mir. :)
Wie definiere ich die Modes ? Wie lese ich die übergebenen Werte aus ?
Kann mir da jemand kurz eine Idee, bzw. weiterführenden Link anreichen ?
Vielen Dank,
Stefan
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.
Hallo Andreas,
prima, genau das hatte ich gesucht ! Vielen Dank !
Gruß,
Stefan