37

誰かがこれが何を意味するのか私に説明できますか?私はこの構成を見たことがありません-Prestashopドキュメントから取得

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

$ languageには、次のキーが含まれています。

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

その結果、$ language ["id_lang"]-1の値を取ります。しかし、構文が理解できず、それに関するドキュメントが見つかりません。

4

3 に答える 3

38

このphp -aセッションは、それがまったく無意味であることを示しています。

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

基本的に、それ自体で何かを「ビットごとまたは」すると、元の値が得られます。この性質は、数学では冪等性と呼ばれます。詳細については、次を参照してください。

正直なところ、そのコードの最初の作成者は、彼らが何をしているのかわかりませんでした。

于 2012-11-19T10:57:19.203 に答える
14

これは、文字列「id_lang」内の文字の ASCII 値に対してビット単位の演算子を使用することですが、結果が常に同じになるため、なぜこれを行うのかはわかりません。

少し詳しく説明するために、(便宜上) ASCII を使用しているとしましょう。各文字は 1 バイトとしてエンコードされます。105最初の文字 (i は、バイナリでは は01101001)のバイナリ表現を比較するとどうなるか見てみましょう。

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

0|0は 0、1|1は 1 なので、必然的にすべてのビットは変更されません。

于 2012-11-19T10:55:30.067 に答える
9

奇妙なことに、それは何もしていません。

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

http://ideone.com/zXdRMO

何かをしていたとしても、文字列ベースの配列キーでビット単位の演算子を使用すると、確かにコードの匂いがします

于 2012-11-19T10:56:58.887 に答える