Почему невозможно объединить ключевое слово continue в выражении? - PullRequest
2 голосов
/ 28 ноября 2011

Почему это невозможно сделать?

foreach($arr as $k => $v)
{
   if($condition) { $obj->myMethod() && continue; }
}

После оценки $obj->myMethod() оценивается (выполняется) ключевое слово continue, что приводит к пропуску текущей итерации.

РЕДАКТИРОВАТЬ : я спрашиваю это, потому что что-то вроде:

if($error) { $log->fatal('Something weird happened.') && continue; }

является одной строкой и не требует пояснений.

Ответы [ 3 ]

9 голосов
/ 28 ноября 2011

continue - это утверждение, а не выражение.
И никогда не встретятся двое.

Вы не можете поместить выражение в выражение. (Что бы echo false && continue; напечатать?)

Вместо этого используйте if, который может содержать операторы.

1 голос
/ 28 ноября 2011

Вы не можете оценить продолжить как условие. Ключевое слово continue не работает так же, как в других языках. В PHP, в зависимости от контекста, продолжение и разрыв могут быть несколько синонимами, рассмотрим следующую конструкцию:

 <?php
  switch ($months)
  {
    // start with vowels
    case 'august':
      break;
    case 'april':
      continue;     // exactly the same as "break" !!!
    default:
      return 'OK';
  }

  throw new StartsWithVowelException('Months with vowels are creepy');

?>

Пока мы обсуждаем эту тему, ключевые слова break и continue имеют в PHP функцию, которая делает их немного более интересными и мощными, чем их аналоги в других языках.

Оба могут получить числовой аргумент при использовании в цикле, который указывает, сколько циклов нужно продолжить или выйти из цикла. Например, вот пример, который возобновляет выполнение внешнего цикла изнутри внутреннего: *

<?php

  //
  // verify that each sub array contains the given value
  //
  $lowerval = strtolower($value);

  foreach ($TwoDArray as $otherArray)
  {
    foreach ($otherArray as $value)
    {
      if (strtolower($value) == $lowerval)
      {
        // we found the value -- this one definitely has it.
        continue 2;
      }
    }

    // if we've reached here, then the inner loop doesn't have the
    // value.  ¡aiiee!
  }

?>

Надеюсь, это поможет вам с этими двумя конструкциями, удачи.

0 голосов
/ 28 ноября 2011

continue это утверждение.В PHP оператор и выражение - это две разные вещи, операторы не могут быть оценены, потому что они по природе не возвращают true или false, что является требованием для оценки в PHP.

В PHP вам придется что-то делатькак:

if(test()) continue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...