В последней строке следующего кода он имеет &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>';
$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
.
Весьма аккуратный трюк ИМО, не уверен, насколько он безопасен.
&
является побитовым оператором И. Результатом 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
Это поразрядный оператор .
Похоже, он использует этот конкретный бит, чтобы скрыть страницу.
Если вы не знаете, какой битторный оператор, рассмотрите значение 74 в двоичном формате:
0100 1010
Если вы and
это с 2 ( 0000 0010
), вы получаете:
0100 1010 0000 0010 ---- ---- 0000 0010
или ненулевое (истинное) значение.
Линии:
$special=0; if(isset($_REQUEST['hidden']))$special+=2;
устанавливают этот бит на основе hidden
ключа.
В PHP &
является побитовым оператором для AND
.
Таким образом, это будет AND
двоичное значение $page['special']
с двоичным значением 2, которое будет:
0000 0010
Таким образом, общее значение будет либо 2, либо 0 .
& является побитовым оператором И.
& 2 проверяет, установлен ли второй бит в значении специального поля.