What does & in &2 mean in PHP?
In the last line of the following code, it has &2, if($page['special']&2).
What does & mean?
if(isset($_REQUEST['id']))$id=(int)$_REQUEST['id'];
else $id=0;
if($id){ // check that page exists
$page=dbRow("SELECT * FROM pages WHERE id=$id");
if($page!==false){
$page_vars=json_decode($page['vars'],true);
$edit=true;
}
}
if(!isset($edit)){
$parent=isset($_REQUEST['parent'])?(int)$_REQUEST['parent']:0;
$special=0;
if(isset($_REQUEST['hidden']))$special+=2;
$page=array('parent'=>$parent,'type'=>'0','body'=>'','name'=>'','title'=>'','ord'=>0,'description'=>'','id'=>0,'keywords'=>'','special'=>$special,'template'=>'');
$page_vars=array();
$id=0;
$edit=false;
}
// { if page is hidden from navigation, show a messa开发者_StackOverflow社区ge saying that
if($page['special']&2)echo '<em>NOTE: this page is currently hidden from the front-end navigation. Use the "Advanced Options" to un-hide it.</em>';
$page['special'] & 2
means
$page['special']
bitwise AND2
It basically checks to see if the 2 bit is set in $page['special']
.
This line:
if(isset($_REQUEST['hidden']))$special+=2;
explicitly adds 2 to $special
so that it'll satisfy the bitwise AND operation and comparison, because decimal 2 == binary 10, with the 1 representing the 21 bit, ensuring it is set.
The AND operation returns 2 if the 2 bit is set, which resolves to true
in PHP and satisfies the condition; otherwise it returns 0 which is considered false
.
Quite a neat trick IMO, not sure how secure it is though.
&
is the bitwise AND operator. The result of a & b
are the bits that are equal in a
and b
.
So in this case $page['special']&2
returns either 0
or 2
depending on the bit pattern of $page['special']
:
**** **** **** **** **** **** **** **X* // $page['special']
& 0000 0000 0000 0000 0000 0000 0000 0010 // 2
=========================================
0000 0000 0000 0000 0000 0000 0000 00X0 // $page['special'] & 2
It's the bitwise and operator.
It looks like it's using that particular bit to hide the page.
In case you don't know what the bitwise operator is, consider the value 74 in binary:
0100 1010
If you and
this with 2 (0000 0010
), you get:
0100 1010
0000 0010
---- ----
0000 0010
or a non-zero (true) value.
The lines:
$special=0;
if(isset($_REQUEST['hidden']))$special+=2;
are setting that bit based on the hidden
key.
In PHP &
is the bitwise operator for AND
.
So it would AND
the binary value of $page['special']
with the binary value of 2, which would be:
0000 0010
So the overall value will either be 2 or 0.
& is the bitwise AND operator.
& 2 checks whether the second bit in the special field's value is set.
精彩评论