Подтвердить что ты не робот

Что это такое побитовое ИЛИ делать в этой сложной конструкции ключа?

Может кто-нибудь объяснить мне, что это значит? Я никогда не видел эту конструкцию, взятую из документа 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. Но я не понимаю синтаксис и не могу найти никакой документации об этом.

4b9b3361

Ответ 1

Этот сеанс 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

В принципе, если вы "побитовое" или "что-либо отдельно", вы получаете исходное значение. Это свойство называется idempotence в математике. Для получения дополнительной информации читайте:

Честно говоря, оригинальный автор этого кода понятия не имел, что они делают.

Ответ 2

Что это значит, это использовать побитовый оператор по значениям ASCII символов в строке "id_lang", хотя почему они делают это за пределами меня, так как результат всегда будет таким же.

Чтобы немного разобраться, скажем (для удобства), что мы используем ASCII, где каждый символ кодируется как один байт. Давайте посмотрим, что происходит, когда оно сравнивается для двоичного представления первого символа (i - 105, который в двоичном формате 01101001):

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

0|0 равно 0, 1|1 равно 1, поэтому неизбежно все биты остаются неизменными.

Ответ 3

Он ничего не делает, как ни странно.

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

http://ideone.com/zXdRMO

Даже если бы он что-то делал, использование побитового оператора в строковом массиве ключей, конечно, ощущается как запах кода для меня.