Что означает & 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 проверяет, установлен ли второй бит в специальном значении поля.