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,其中每个字符都被编码为一个字节。让我们看看当它对第一个字符的二进制表示进行比较时会发生什么(i 是105,在二进制中是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 回答