2015-11-04 44 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

相關問題