2015-11-04 104 views
0

一个变量我有检查,如果用户有一个剧目中的权利的特权,如果用户确实,我想它设定新的变量的函数:getprivileges = true使用条件设置为True

<?php 
    $directory = $_SESSION['cwd'];     // current directory 
    $user = $_SESSION['simple_auth']['username']; // get username 
    $repository = gatorconf::get('repository');  // get base repertory of the file manager 
    $userdir = $repository.DS.'user'.DS.$user;  // user's repertory 

function scanDirectory($userdir = '', $directory){ 
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR); 
    foreach($folders as $folder){ 
     if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) { 
      $getprivileges = true; 
      break; 
     } 
     scanDirectory($folder, $directory); 
    } 
} 

scanDirectory($userdir, $directory); 
?> 

<?php if ($getprivileges == true): ?> 
<p>Permissions granted.<p> 
<?php endif; ?> 

我相信功能return是我正在寻找,但我真的不知道如何使用它。 代码的最后部分仅仅是我打算对变量做的一个例子。

我添加了,到目前为止我的变量$ getprivileges没有在我的代码中的其他地方定义,所以也许我必须先给它一个默认值?

有人可以给我一些解释我如何做到这一点?

非常感谢

解决方案更新从注释:

<?php 
    $directory = $_SESSION['cwd'];     // current directory 
    $user = $_SESSION['simple_auth']['username']; // get username 
    $repository = gatorconf::get('repository');  // get base repertory of the file manager 
    $userdir = $repository.DS.'user'.DS.$user;  // user's repertory 
    $getprivileges = scanDirectory($userdir, $directory); 

function scanDirectory($userdir = '', $directory){ 
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR); 
    foreach($folders as $folder){ 
     if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) { 
      return true; 
      break; 
     } 
     scanDirectory($folder, $directory); 
    } 
} 

scanDirectory($userdir, $directory); 
?> 

<?php if ($getprivileges == true): ?> 
<p>Permissions granted.<p> 
<?php endif; ?> 
+0

开始,'$ getprivileges'超出范围。 # – ScarletMerlin

+1

'return true;'或在最后'返回false;'然后调用'$ getprivileges = scanDirectory($ userdir,$ directory);' – AbraCadaver

+1

将'scanDirectory($ userdir,$ directory);'设置为一个变量。然后让函数返回true或false。然后检查该变量(或者只是函数调用)。也应该看看http://php.net/manual/en/language.variables.scope.php。注意本地和全局范围。 – chris85

回答

1

我这个做了一个社区维基因为作者已经想出了解决方案。


你是对的,你需要使用return。通过使用return,您可以返回某个值作为函数调用的值,并将该值分配给一个变量。在你的情况下,你想返回truefalse

然后你可以设置$getprivileges像这样:

$getprivileges = scanDirectory($userdir, $directory); 

你的函数应该是这个样子:

function scanDirectory($userdir = '', $directory){ 
    $folders = glob($userdir . '/*' , GLOB_ONLYDIR); 
    foreach($folders as $folder){ 
     if (($folder == $directory && gator::checkPermissions('r')) || (gator::checkPermissions('ru')) || ($userdir == $directory && gator::checkPermissions('r'))) { 
      // Replaced here. 
      return true; 
     } 
     scanDirectory($folder, $directory); 
    } 

    // Added here. 
    return false; 
} 
+0

感谢您的回答,是的,这确实是我最终做的,我看到你添加了'return false' tho,是否需要? – apatik

+0

一旦条件匹配,是否还没有中断退出功能?或者返回也是如此? – apatik

+1

@apatik'return'也退出函数。 'break'实际上只能退出循环,所以如果你需要退出整个函数,最好使用'return'。而且,最后的'return false'确保如果函数不返回'true',函数将返回'false'。 PHP函数默认返回null,尽管null!= true,所以你的条件仍然会通过。 – Zsw

相关问题