PHP: 'или' оператор на сбое инструкции: как выдать новое исключение?

Почему Вы не можете просто сделать чего-то как

List GetKRandomFromList(List input, int k)
  List ret = new List();
  for(i=0;i<k;i++)
    ret.Add(input[Math.Rand(0,input.Length)]);
  return ret;

, я уверен, что Вы не имеете в виду что-то, что простой, таким образом, можно определить далее?

19
задан Strae 31 July 2009 в 08:15
поделиться

3 ответа

или - это просто логический оператор , аналогичный || .

Обычный трюк

mysql_query() or die();

может так же хорошо быть написанным

mysql_query() || die();

Здесь происходит то, что оператор «логическое или» (в зависимости от того, что вы выберете) пытается определить, оценивается ли какой-либо из операндов как ИСТИНА. Это означает, что операнды должны быть выражениями, которые могут быть преобразованы в логическое значение.

Итак, причина

bar() or throw new Exception();

недопустима, потому что

(boolean)throw new Exception();

также недопустимо. По сути, процесс создания исключения не генерирует возвращаемое значение для проверки оператором.

32
ответ дан 30 November 2019 в 03:25
поделиться

Почему bar () и bb () не генерируют исключения? В PHP всплывают исключения, поэтому нет необходимости генерировать исключение в функции / методе, в которых вы вызываете bar () / bb () . Эти исключения могут быть вызваны bar () / bb () . Если вы хотите создать другое исключение, вы можете просто сделать:

function foo() {
    try {
        $bar = bar();
    } catch (BarException) {
        throw new FooException;
    }
}
2
ответ дан 30 November 2019 в 03:25
поделиться

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

$foo = bar();
if(!$foo){
    echo 'We have a problem in here';
}

На комментарий - я не думаю, что вы можете сделать это в одна строка (т.е. без проверки if (! $ foo) ), и я согласен с тем, что метод генерации исключения довольно ужасен. Лично я предпочитаю ясность:

$foo = bar();
if(!$foo){
    throw new Exception('We have a problem in here');
}

, но это личное предпочтение. Если вам нужна однострочная функция, я думаю, вам придется пойти с опцией функции генерации исключений.

Я полагаю, что это ограничение, вероятно, связано с особенностями динамической типизации PHP, она может приводить результаты функции вызов условного выражения, но не результаты броска .

1
ответ дан 30 November 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: