开发者

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 AND 2

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜