Что означает & in & 2 в 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>';

Ответ 1

$page['special'] & 2

означает

$page['special'] побитовое и 2

В основном он проверяет, установлен ли 2 бит в $page['special'].

Эта строка:

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

явно добавляет 2 к $special, чтобы он удовлетворял побитовой операции И и сравнению, потому что decimal 2 == двоичный 10, с 1, представляющим бит 2 1 гарантируя, что это набор.

Операция AND возвращает 2, если установлен бит 2, который разрешает true в PHP и удовлетворяет условию; в противном случае он возвращает 0, который считается false.

Довольно аккуратный трюк IMO, не уверен, насколько он безопасен.

Ответ 2

& является побитовым оператором AND. Результатом a & b являются биты, которые равны в a и b.

Итак, в этом случае $page['special']&2 возвращает либо 0, либо 2 в зависимости от битового шаблона $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

Ответ 3

Он побитовый и оператор.

Похоже, что этот бит используется для скрытия страницы.

Если вы не знаете, какой битторный оператор, рассмотрите значение 74 в двоичном формате:

0100 1010

Если вы and это с 2 (0000 0010), вы получите:

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

или ненулевое (истинное) значение.

Строки:

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

устанавливают этот бит на основе клавиши hidden.

Ответ 4

В PHP & - побитовый оператор для AND.

Таким образом, было бы AND двоичное значение $page['special'] с двоичным значением 2, которое было бы следующим:

0000 0010

Таким образом, общее значение будет равно 2 или 0.

Ответ 5

& это побитовый И оператор.

& 2 проверяет, установлен ли второй бит в специальном значении поля.