在这个奇怪的数组键构造中,这个按位或做什么?

dea*_*bry 37 php

谁能向我解释这意味着什么?我从未见过这个构造 - 取自Prestashop doc

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

$ language包含以下键:

Array
(
    [id_lang] => 1
    [name] => English (English)
    // and others... 
)
Run Code Online (Sandbox Code Playgroud)

结果是它需要$ language ["id_lang"]的值 - 1.但我不懂语法,也找不到任何关于它的文档.

Bot*_*ázs 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
Run Code Online (Sandbox Code Playgroud)

基本上,如果你自己"按位"或"任何东西",你就会获得原始价值.这个属性在数学中称为幂等.有关详细信息,请阅读:

老实说,该代码的原作者不知道他们在做什么.

  • 我也喜欢这个.我在大学里学到的最无用的一句话:) (3认同)

Asa*_*din 14

这样做是对字符串"id_lang"中字符的ASCII值使用按位运算符,尽管为什么他们这样做是超出我的,因为结果总是相同的.

为了详细说明,让我们说(为了方便起见)我们使用ASCII,其中每个字符都被编码为单个字节.让我们看一下当它对第一个字符的二进制表示进行比较时会发生什么(i 105,二进制表示01101001):

   "i": 01101001
OR "i": 01101001
      ___________
      = 01101001
      = "i"
Run Code Online (Sandbox Code Playgroud)

0|0为0,1|1为1,因此所有位都不可避免地保持不变.

  • 更迂腐:它是字符串的*字节值*,这取决于它恰好被编码.是的,在实践中,这几乎就是"ASCII值"...... :) (5认同)

mač*_*ček 9

奇怪的是,它没有做任何事情.

var_dump('id_lang'|'id_lang');
#=> string(7) "id_lang"
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/zXdRMO

即使做什么的,使用位运算符在基于字符串数组键肯定感觉就像代码气味给我.

  • +1用于记录字符串上的按位操作 (2认同)