php 二進位制位操作舉例
阿新 • • 發佈:2018-11-25
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 就可以了。
- 效能更高,只是位操作,對計算機來說運算量極小
缺點:
- 位操作用的少,一般不怎麼熟悉。程式碼閱讀成本較高