1. 程式人生 > >php 二進位制位操作舉例

php 二進位制位操作舉例

php 二進位制位操作舉例


部落格最近長草了,非常抱歉。最近家裡和公司事情比較多,沒有時間來管理部落格。看了大家的評論,關於demo的事情,我會盡量早點的編寫。

下面說正題,關於php的位操作。

對這一塊我也不是非常的熟悉,不過最近要開發一個許可權判度的功能。使用這個會很比較簡單,我直接用例子來作說明。

一般正規開發公司,會有三到四套的環境,分別是

DEV:開發環境
TEST:測試環境
PRE:預釋出環境
PRD:正是環境

如果我們要作一個許可權控制。
比如某個程式只能在生產環境來執行。
某個程式可以在開發環境和測試環境。

那我們可以用二進位制的位來設計,總共4個環境,用四個二進位制數來表示就可以了。0表示沒有許可權,1表示有許可權。
比如 ,從右到作

第一位,控制是否可以在測試環境執行,比如0001 ,表示可以在開發環境執行,0000,表示不可以在開發環境執行

第二位 控制是否可以在測試環境執行,比如0010 ,表示可以在測試環境執行,0000,表示不可以在測試 環境執行

第三位 控制是否可以在預釋出環境執行,比如0100 ,表示可以在預釋出環境執行,0000,表示不可以在預釋出 環境執行

第四位 控制是否可以在生產環境執行,比如1000 ,表示可以在生產環境執行,0000,表示不可以在生產環境執行
。
。
1111:表示,在所有環境下執行,轉換成10進位制是 15
0000:表示所有環境都不可以執行,轉換成10進位制是 0
0011:表示測試和開發環境可以執行,預釋出環境和生產環境不可以執行 轉換成10進位制是 3

進位制轉換參考網站
http://tool.oschina.net/hexconvert/

<?php
/**
 * 可以在測試可以開發環境執行
 * 二進位制表示 0001 = 1
 */
const RUN_IN_DEV = 1;

/**
 * 可以在測試可以測試環境執行
 * 二進位制表示 0010 = 2
 */
const RUN_IN_TEST = 2;

/**
 * 可以在測試可以預釋出環境執行
 * 二進位制表示 0100 = 4
 */
const RUN_IN_PRE = 4;

/**
 * 可以在測試可以預釋出環境執行
 * 二進位制表示 1000 = 8
 */
const RUN_IN_PRD = 8;

/**
 * 加入我們有一個程式許可權需要設定位,可以在測試,開發,預釋出環境來執行,但是進位制在生產環境下炮
 *  對應的設定碼位:0111  轉換成10進位制位 7
 *  
 */
$task1 = 7; //二進位制  0111,只允許在開發和測試環境執行
//$task1 = 15; //二進位制  1111,可以在所有環境下執行
//$task1 = 1; //二進位制  0001,只能在開發環境執行
//$task1 = 0; //二進位制  0000,所有環境都不能執行

//是否可以在開發環境執行
$currentEnv = '開發環境';
cheeck($task1, RUN_IN_DEV, $currentEnv);

//是否可以在測試環境執行
$currentEnv = '測試環境';
cheeck($task1, RUN_IN_TEST, $currentEnv);

//是否可以在測試環境執行
$currentEnv = '預釋出環境';
cheeck($task1, RUN_IN_PRE, $currentEnv);

//是否可以在生產環境執行
$currentEnv = '生產環境';
cheeck($task1, RUN_IN_PRD, $currentEnv);


/**
 * 許可權檢測
 *
 * @param $task 許可權設定
 * @param $env 當前的環境
 */
function cheeck($task, $env, $envName)
{
    //注意這裡是一個& 符號
    if ($task & $env) {
        echo("可以在{$envName}環境下執行" . PHP_EOL);
    } else {
        echo("禁止在{$envName}環境下執行" . PHP_EOL);
    }
}

執行結果如下

/usr/bin/php /home/ndw/PhpstormProjects/test/bitOpDemo.php
可以在開發環境環境下執行
可以在測試環境環境下執行
可以在預釋出環境環境下執行
禁止在生產環境環境下執行
Process finished with exit code 0

這樣設定有什麼優點呢:

  • 簡潔容易擴充套件,如果要增加一套環境,只需要增加二進位制的位數就可以了。如上例子,如果要調整上面的許可權,可以在所有環境下執行,只需要改變 $task1= 15 就可以了。
  • 效能更高,只是位操作,對計算機來說運算量極小

缺點:

  • 位操作用的少,一般不怎麼熟悉。程式碼閱讀成本較高