什么和& in& 2是指PHP?

时间:2011-01-16 12:13:56

标签: php

在以下代码的最后一行中,它有&2, if($page['special']&2).

什么&意思?

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 message 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>';

5 个答案:

答案 0 :(得分:15)

$page['special'] & 2

装置

  

$page['special'] bitwise AND 2

它基本上检查$page['special']中是否设置了2位。

这一行:

if(isset($_REQUEST['hidden']))$special+=2;

明确地向$special添加2,以便它满足按位AND运算和比较,因为十进制2 ==二进制10,其中1代表2 1 位,确保它已经确定。

如果设置了2位,则AND操作返回2,在PHP中解析为true并满足条件;否则返回0,即false

相当巧妙的技巧IMO,但不确定它有多安全。

答案 1 :(得分:13)

& is the bitwise AND operator. a & b的结果是ab中相等的位。

因此,在这种情况下,$page['special']&2会返回02,具体取决于$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

答案 2 :(得分:7)

这是bitwise and operator

看起来它正在使用该特定位来隐藏页面。

如果您不知道按位运算符是什么,请考虑二进制值74:

0100 1010

如果and这个用2(0000 0010),你会得到:

0100 1010
0000 0010
---- ----
0000 0010

或非零(真)值。

行:

$special=0;
if(isset($_REQUEST['hidden']))$special+=2;

根据hidden键设置该位。

答案 3 :(得分:2)

在PHP中&AND的按位运算符。

因此AND二进制值为$page['special'],二进制值为2,这将是:

0000 0010

因此整体价值将为2或0

答案 4 :(得分:0)

&安培;是bitwise AND运算符。

&安培; 2检查是否设置了特殊字段值中的第二位。