この記事では主にバイナリクロスパーミッションのmicro-phpクラスを紹介しますので、必要な方は参考にしてください
ハイライト: 1. 多対多のクロスシナリオ割り当て。 2. PHP の新機能 - クロージャとバッチ処理関数の使用 array_walk/array_flip; 3. ビット操作と使用例。 使用するシーン: 1. 一般的な追加、削除、変更、および検索 (2 の N 乗値がデータベースに保存されます)。 2. 認証、サードパーティアカウントバインディング、複数カテゴリの選択。 コードは以下のように表示されます。 scene=$scene; $this->case_list=$this->case_list(true); if ($allow_value) { $this->allow_value=$allow_value; $this->allow_list=$this->allow_list($allow_value,true); } } //すべてのタスクリストを取得する 関数 case_list($mode=false){ $case_list=config($this->scene,'allow'); $mode を返しますか? $case_list : array_keys($case_list); } //ユーザーのタスクリストを取得する 関数allow_list($allow_value=0,$mode=false){ $buffer=array(); foreach ($this->case_list as $key=>$value) { if ($allow_value & pow(2,$key-1)) { $buffer[$key]=$value; } } $モードを返す : $buffer : array_keys($buffer); } //許可される値を計算します 関数allow_value($allow_list=null){ if ($allow_list==null) $allow_list=$this->allow_list; array_walk($allow_list, function($value,$key) use(&$allow_list){ $allow_list[$key]=pow(2,$value-1); }); array_sum($allow_list) を返します。 } //許可するかどうかを判断する 関数 is_allow($case){ $case_list=array_flip($this->case_list); return (bool)($this->allow_value & pow(2,$case_list[$case]-1)); } } コードは以下のように表示されます。 [アクセス] 1=追加 2=デル 3=読む 4=リスト 5=mod 6=詳細 7=パブ 8=収集 9=いいね 10=送信 [証明書] 1=電子メール 2=電話番号 3=qq 4=アイデンティティカード 5=本名 6=ビジネスライセンス [練る] 1=qq 2=微博 3=タオバオ 4=アリペイ 5=レンレン 6=微チャット 7=百度