Zitat "die idee ist nicht gut, wirklich. sie würden besser übergeben einige boolesche. wenn sie wollen, verwenden sie bitweise dann
function someFunc($options)
{
if ($options & 1 != 0)
//then option 1 enabled
if ($options & (1 << 1) != 0)
//then option 2 enabled
if ($options & (1 << 2) != 0)
//then option 3 enabled
}
"
Was Sie getan haben, wäre in Ordnung, wenn Sie für einen einzelnen Wert überprüfen, obwohl nicht optimal, so überprüfen, dass ein Bit aktiviert ist, aber sagen wir, wir wollten in der Lage sein, alle übereinstimmen, oder genau könnten wir die folgenden Methoden haben
function matchExact($in, $match) { // meets your criterion, as would a switch, case, but ultimately not suited for use with flags
return $in === $match;
}
function matchAny($in, $match) { // meets original criterion with more lexical name however it returns true if any of the flags are true
return $in |= $match;
}
Wenn Sie dies noch erweitern möchten, indem Sie bestimmte Aktionen nur dann durchführen, wenn Bit x,y,z aktiviert ist, könnten Sie Folgendes verwenden
function matchHas($in, $match) { // more bitwise than === as allows you to conditionally branch upon specific bits being set
return $in &= $match;
}
Ich denke auch, wenn Sie das tun, was in dem obigen Zitat getan wurde, sind Flaggen vielleicht nicht die beste Idee, exakte Werte könnten besser sein, was den Vorteil hat, dass es diskretere Aktionen ermöglicht. (0-255) für 8-Bit über 8 verschiedene Flaggen
Flaggen funktionieren nur deshalb so gut, weil zur Basis 2 "8" keine "4" und "2" keine "1" enthält.
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
|8|4|2|1|Base 10 Value |
------------------------
|1|1|1|1|15 |
|1|1|1|0|14 |
|1|1|0|1|13 |
|1|1|0|0|12 |
|1|0|1|1|11 |
|1|0|1|0|10 |
|1|0|0|1|9 |
|1|0|0|0|8 |
|0|1|1|1|7 |
|0|1|1|0|6 |
|0|1|0|1|5 |
|0|1|0|0|4 |
|0|0|1|1|3 |
|0|0|1|0|2 |
|0|0|0|1|1 |
|0|0|0|0|0 |
------------------------