在这个奇怪的数组键构造中,这个按位“或”是什么?
有人可以向我解释这是什么意思? 我从来没有见过这种构造 – 取自Prestashop文档
foreach ( $languages as $language ) { echo '<div id="test_' . $language['id_lang'|'id_lang'] .... // <-- What the?? // ... }
$语言包含以下键:
Array ( [id_lang] => 1 [name] => English (English) // and others... )
其结果是,它需要$ language [“id_lang”] – 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
基本上,如果你自己“按比特”或任何东西,你会得到原来的价值。 这个性质在math中被称为幂等性 。 有关更多信息,请阅读:
老实说,这个代码的原始作者不知道他们在做什么。
这样做是在string“id_lang”中的字符的ASCII值上使用按位运算符,虽然为什么他们这样做超出了我,因为结果总是相同的。
为了阐述一点,让我们说(为了方便起见),我们使用ASCII,其中每个字符被编码为单个字节。 让我们来看看在比较第一个字符的二进制表示(i是105
,二进制是01101001
)时会发生什么:
"i": 01101001 OR "i": 01101001 ___________ = 01101001 = "i"
0|0
是0,1 1|1
是1,所以不可避免地所有位保持不变。
没有做任何事情,奇怪的是。
var_dump('id_lang'|'id_lang'); #=> string(7) "id_lang"
即使是在做一些事情,在一个基于string的数组键上使用一个按位运算符,肯定会让我感觉到代码的味道。