在访问方法和类时使用php流控制


Using php flow control when accessing methods and classes

我目前正在使用一个类来控制对我网站中某些文件的访问。这门课很好。然而,我最近被告知,我需要为网站的一个特定部分创建一个更细粒度的系统。我的第一个倾向是使用嵌套的if-else-if来设置几个变量。

$admin = new Admin();
if( $admin->user_access('can_view_g2')) {
    $groupNum = $group2;
    $adminGroup = true;
    } else {
if( $admin->user_access('can_view_g3')) {
    $groupNum = $group3;
    $adminGroup = false;
    } else {
if( $admin->user_access('can_view_g4')) {
    $groupNum = $group4;
    $adminGroup = true;
    } else {
. . . 

现在我想删除几行代码并创建一个更干净的流控制语句。我想使用一个开关语句来处理这个,但我不确定这是可能的,因为我正在访问一个类的方法和属性。

switch ($admin->user_access($permission)) {
    case 'can_view_g2':
        $groupNum = $group2;
        $adminGroup = true;
    break;
    case 'can_view_g3':
        $groupNum = $group3;
        $adminGroup = true;;
    break;
    case 'can_view_g4':
        $groupNum = $group4;
        $adminGroup = true;
    . . .

我上面的东西不起作用。有人知道这样做的方法吗,或者至少是更有效的流控制方法?

试试这个:

$user_access = $admin -> user_access($permission);
switch($user_acces) {
...

这是因为"cannot use return value ...."出错了…

如果你只是想把If/else块变成一个switch/case:

switch (true) {
    case $admin->user_access('can_view_g2'):
        $groupNum = $group2;
        $adminGroup = true;
    break;
    ...
}