citation « l'idée est pas bon, vraiment. Vous mieux passer quelques booléen. Si vous voulez utiliser bitwise puis
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
}
»
Qu'est-ce que vous avez fait serait bien si vous étiez vérifier une seule valeur, bien que non optimale, donc vérifier qu'un bit est activé, mais disons que nous voulions être en mesure de correspondre à tout, ou exact nous pourrions avoir les méthodes suivantes
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;
}
si vous vouliez ensuite élargir en ayant des actions spécifiques ne se passe si le bit x, y, z a été activée, vous pouvez utiliser les éléments suivants
function matchHas($in, $match) { // more bitwise than === as allows you to conditionally branch upon specific bits being set
return $in &= $match;
}
Je pense aussi que si vous faites ce qui a été fait dans le citation ci-dessus, les drapeaux peuvent ne pas être la meilleure idée, les valeurs exactes pourraient être meilleures, ce qui a l'avantage de permettre des actions plus discrètes. (0-255) pour 8 bits sur 8 drapeaux distincts
La raison pour laquelle les drapeaux fonctionnent si bien est parce que dans la base 2 "8" ne contient pas "4", et "2" ne contient pas "1".
________________________
|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 |
------------------------
Je ne pense pas que ce soit une réponse complète donc je vais le placer comme un commentaire, mais jetez un oeil sur les autorisations pour les fichiers et les répertoires sur UNIX comme exemple. – Clutch
* (apparenté) * http://stackoverflow.com/questions/2131758/bitwise-operations-in-php/2131828#2131828 – Gordon