PHP Сокращения if / else if - Basic - PullRequest
2 голосов
/ 18 марта 2011

У меня есть фрагмент существующего кода, который я не понимаю.

Мне обычно не нравятся сокращения, потому что это требует изменения конфигурации, и мне труднее читать По этой причине я не особенно знаком с этим. Существующий код был написан кем-то, кто любит стенографию.

Когда я столкнулся с этим:

if($type == 'a') $type = 'Type A';
else if($type == 'b') $type = 'Type B';
else if($type == 'c') $type = 'Type C';

Я прочитал это как простую строку if и else if. Я преобразовал это в:

if($type == 'a') {
  $type = 'Type A';
} else if($type == 'b') {
  $type = 'Type B';
} else if($type == 'c') {
  $type = 'Type C';
}

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

Ответы [ 6 ]

4 голосов
/ 18 марта 2011

Они абсолютно идентичны, разница должна быть в другом месте.

Это копия / вставка кода до и после?

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

switch ($type) {
  case 'a':
    $type = 'Type A';
    break;

  case 'b':
    $type = 'Type B';
    break;

  case 'c':
    $type = 'Type C';
    break;

  default:
    break;
}
1 голос
/ 18 июня 2011

возврат $ type нежелателен? если это так, я бы:

if($type == 'a') {
  $type = 'Type A';
} else if($type == 'b') {
  $type = 'Type B';
} else if($type == 'c') {
  $type = 'Type C';
} else {
 $type = 'Other Type';
}

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

switch ($type) {
  case 'a':
    $type = 'Type A';
    break;

  case 'b':
    $type = 'Type B';
    break;

  case 'c':
    $type = 'Type C';
    break;

  default:
    $type = 'Other Type';
    break;
}

Таким образом, вы всегда можете увидеть, какими будут нежелательные данные, в зависимости от обстоятельств, которые я всегда устанавливал по умолчанию, особенно в режиме разработки.

1 голос
/ 18 марта 2011

На самом деле это не сокращенный синтаксис. Это просто if / else if / else if, где каждый раздел имеет только одну инструкцию и, следовательно, не нуждается в наборе {}.

Немного понятнее при форматировании с переносами строк:

if($type == 'a')
    $type = 'Type A';
else if($type == 'b')
    $type = 'Type B';
else if($type == 'c')
    $type = 'Type C';
1 голос
/ 18 марта 2011

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

Хотя я должен отметить, что я не обнаружил никаких различий в кодах 2 версии вашего кода.Именно этот случай переключения делает его более читабельным, чем многие операторы if, else if, else if.

1 голос
/ 18 марта 2011

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

Вау, сделал тестовый файл:

<?php
$type = 'a';

if($type == 'a') $type = 'Type A';
else if($type == 'b') $type = 'Type B';
else if($type == 'c') $type = 'Type C';
echo $type . "\n";


$type = 'b';

if($type == 'a') $type = 'Type A';
else if($type == 'b') $type = 'Type B';
else if($type == 'c') $type = 'Type C';
echo $type . "\n";


$type = 'c';

if($type == 'a') $type = 'Type A';
else if($type == 'b') $type = 'Type B';
else if($type == 'c') $type = 'Type C';
echo $type . "\n";


$type = 'a';

if($type == 'a') {
  $type = 'Type A';
} else if($type == 'b') {
  $type = 'Type B';
} else if($type == 'c') {
  $type = 'Type C';
}
echo $type . "\n";

$type = 'b';

if($type == 'a') {
  $type = 'Type A';
} else if($type == 'b') {
  $type = 'Type B';
} else if($type == 'c') {
  $type = 'Type C';
}

echo $type . "\n";
$type = 'c';

if($type == 'a') {
  $type = 'Type A';
} else if($type == 'b') {
  $type = 'Type B';
} else if($type == 'c') {
  $type = 'Type C';
}
echo $type . "\n";

и результаты, где на самом деле то же самое.

Type A
Type B
Type C
Type A
Type B
Type C
0 голосов
/ 18 марта 2011

они идентичны, ошибка в другом месте.

...