1

私はこれについて本当に興味があり、実装する予定はありませんが、適切な条件が発生した場合に使用するクールな制御構造になると思います.

ユーザーが表示しようとしているデータの種類を表すブール値の配列があり、ユーザーがそのデータを表示する権限を持っているかどうかを示すブール値のオブジェクトがあります。

というifステートメントのリストの代わりに、代わりにif(permission and display){show this type}switch(true)を使用して、実際には同じ量のコードを記述しますが、少し適切にフォーマットするcontinue;ことを考えました。いいね。

switch(true){
    case ($processPermissions->history->view) && ($display['history'] !== false):
        $application['history'] = $this->getHistory();
        continue;

    case ($processPermissions->notepad->view) && ($display['notepad'] !== false):
        $application['notepad'] = $this->notepad('get');
        continue;

    case ($processPermissions->documents->view) && ($display['documents'] !== false):
        $application['documents'] = $this->documents('get');
        continue;

    case ($processPermissions->accounting->view) && ($display['accounting'] !== false):
        $application['accounting'] = $this->accounting('get');
        continue;

    case ($processPermissions->inspections->view) && ($display['inspections'] !== false):
        $application['inspections'] = $this->inspections('get');
        continue;

    case ($processPermissions->approvals->view) && ($display['approvals'] !== false):
        $application['approvals'] = $this->approvals('get');
        continue;
}

実際には、配列を作成してそれをループ処理するだけです。これは、各ケースのコードが同一であるためです。

..しかし、私が望むなら、これをどのように機能させることができるかについて、私は非常に興味があります。

4

2 に答える 2

0

次のようなものを持つことができるとき、多くの無意味な繰り返しのように思えます

$stuff_to_check = array('history', 'notepad', 'documents', 'accounting', etc....)
foreach($stuff_to_check as $thing) {
   if ($processPermissions->$thing->view && ($display[$thing] !== false))
       $applications[$thing] = $this->document('get');
   }
}
于 2012-11-17T03:48:36.590 に答える
0

breakこれはすでにサポートされています。ステートメントを含めないでください。case一致したブロックの後のすべてのブロックも、abreakが検出されるまで実行されます。

また、continueステートメントは PHP のブロックで既にサポートされていswitchますが、その動作はbreak.

詳細については、ドキュメントを参照しswitchてください。

$value = 2;
switch ($value) {
    case 0:
        // not executed
    case 1:
        // not executed
    case 2:
        // executed
    case 'whatever':
        // executed
        break;
    case 'foo':
        // not executed
        break;
    default:
        // not executed
}

詳細については、ドキュメントを参照しswitchてください。

于 2012-11-17T03:50:14.563 に答える