Stefan: Bitfield in PHP ? Wie ?

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

  1. 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.

    1. Hallo Andreas,

      prima, genau das hatte ich gesucht ! Vielen Dank !

      Gruß,
      Stefan