37 votes

Que fait ce bitwise OU dans cette construction de clé de tableau étrange?

Quelqu'un peut-il m'expliquer ce que cela signifie?? Je n'ai jamais vu cette construction - extrait de la doc Prestashop

foreach ( $languages as $language )
{
  echo '<div id="test_' . $language['id_lang'|'id_lang'] .... // <-- What the??
  // ... 
}

$langue contient les touches suivantes:

Array
(
    [id_lang] => 1
    [name] => English (English)
    // and others... 
)

Le résultat est que cela prend la valeur de $langue["id_lang"] - 1. Mais je ne comprends pas la syntaxe et ne trouve pas de documentation à ce sujet.

38voto

Botond Balázs Points 1171

Cette php -a session montre que c'est totalement dépourvue de sens:

php > $value = 'something'|'something';
php > echo $value;
something
php > $arr = array('abc' => 1, 'def' => 2);
php > echo $arr['abc'|'abc'];
1
php > echo $arr['def'|'def'];
2

En gros, si vous "ou binaire" rien par lui-même, vous obtenez la valeur d'origine. Cette propriété est appelée idempotence en mathématiques. Pour plus d'info, lire:

Honnêtement, l'auteur original de ce code n'avais aucune idée de ce qu'ils faisaient.

14voto

Asad Points 22968

Ce qui n'est d'utiliser l'opérateur au niveau du bit sur les valeurs ASCII des caractères de la chaîne "id_lang", mais pourquoi ils font cela est au delà de moi, parce que le résultat est toujours le même.

Pour élaborer un peu, disons (pour des raisons de commodité) que l'on utilise des caractères ASCII, où chaque caractère est codé comme un seul octet. Regardons ce qui se passe quand on fait la comparaison de la représentation binaire du premier caractère (je n' 105, ce qui en binaire est - 01101001):

   "i": 01101001
OR "i": 01101001
      ___________
      = 01101001
      = "i"

0|0 0, 1|1 est 1, donc, inévitablement, tous les bits restent inchangés.

9voto

maček Points 25640

Cela ne fait rien, assez étrangement.

 var_dump('id_lang'|'id_lang');
#=> string(7) "id_lang"
 

http://ideone.com/zXdRMO

Même s'il s'agissait de quelque chose, utiliser un opérateur au niveau des bits sur une clé de tableau basée sur des chaînes donne certainement l'impression que le code sent le code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X