Intereting Posts
код воспламенителя Модульные расширения – уровень доступа к MX_Router :: _ set_default_controller () должен быть общедоступным (как в классе CI_Router) Как обрабатывать ошибки доставки почты с помощью PHP DOM для разбора стены Facebook Как создать и сохранить изображение в папке веб-сайта из кодированных base64 данных / строки с помощью PHP Маршрут контроллера не найден в Laravel 4 Получите информацию о пользователе в facebook после входа в систему, используя facebook php sdk PHP, MYSQL, HTML-таблица с таблицей Выход Smarty для этого вручную Обнаруживать теги HTML в строке mysql php выберите запись, похожую на другую как использовать функцию islocationOnEdge для поиска координат на / возле пути google-карт api на стороне сервера Реализация кэширования на уровне модели Почему php не жалуется при ссылке на несуществующую переменную? Multiupload с PHP / JavaScript Codeigniter base_url () не работает должным образом для ajax

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

Solutions Collecting From Web of "Что означает & in & 2 в PHP?"

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