Получение общего возвращаемого значения функции в цикле - PullRequest
1 голос
/ 24 декабря 2009

То, что я делаю, - это циклический просмотр массива и запуск функции по каждому значению массива (функция возвращает true в случае успеха, false при ошибке) Я хотел бы вернуть false, если какой-либо из вызовов внутри цикла вернул false, но я хочу, чтобы весь цикл был обработан.

Вероятно, проще объяснить с помощью кода:

foreach($this->_cacheLocations as $cacheId)
{
    $this->deleteCache($cacheId);
}

return true/false depending on whether anything failed above;

Я бы предпочел не вводить переменную, чтобы отслеживать любые ошибки, если это возможно. Например, я бы предпочел не делать следующее:

$result = true;
foreach($this->_cacheLocations as $cacheId)
{
    $_result = $this->deleteCache($cacheId);
    if(!$_result) $result = false;
}

return $result;

Есть ли причудливый способ сделать это или я должен просто сделать это вторым способом?

Ответы [ 2 ]

3 голосов
/ 24 декабря 2009

Я бы использовал переменную, как вы делали во второй части кода - по крайней мере, именно так я и поступаю в подобных ситуациях.


Если вы хотите исключить одну временную переменную, вы можете использовать:

$result = true;
foreach($this->_cacheLocations as $cacheId)
{
        if (!$this->deleteCache($cacheId)) {
            $result = false;
        }
}
return $result;

Но идея остается той же, что и вы.

2 голосов
/ 24 декабря 2009

Для отслеживания нескольких возвращаемых результатов вам, к сожалению, понадобится переменная. Если вы не хотите, чтобы это была локальная переменная в области действия вашего цикла, вы можете создать свойство объекта, которое было установлено deleteCache(), но если оно не используется и другими функциями, локальная переменная является самой чистой решение.

Предполагая, что $this->deleteCache() всегда возвращает true или false, вы можете сократить его до чего-то вроде этого:

$result = true;
foreach($this->_cacheLocations as $cacheId)
{
        $result = $this->deleteCache($cacheId) && $result;
}
return $result;
...