2015-11-04 4 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; ?> 

Я считаю, что funtion 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;' или в конце 'return false;' then call '$ getprivileges = scanDirectory ($ userdir, $ directory);' – AbraCadaver

+1

Установите 'scanDirectory ($ userdir, $ directory);' переменной. Затем верните функцию true или false. Затем проверьте эту переменную (или просто вызов функции). Также следует посмотреть http://php.net/manual/en/language.variables.scope.php. Обратите внимание на локальные и глобальные области. – chris85

ответ

1

Я сделал это сообщество вики, так как автор уже выяснили решение.


Вы правы, что вам нужно использовать return. Используя return, вы можете вернуть некоторое значение в качестве значения вызова функции и присвоить это значение переменной. В вашем случае вы хотите вернуть либо true, либо false.

Тогда вы можете установить $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' в конце гарантирует, что функция вернет' false', если она не вернет 'true'. PHP-функции по умолчанию возвращают null, хотя null! = True, поэтому ваше условие все равно пройдет. – Zsw

Смежные вопросы