2

理解に問題がある既存のコードがあります。

構成の変更が必要であり、読みにくいため、一般的に省略形は好きではありません。このため、私は特にそれに精通していません。既存のコードは、速記が大好きな人によって書かれました。

これに遭遇したとき:

if($type == 'a') $type = 'タイプ A';
else if($type == 'b') $type = 'タイプ B';
else if($type == 'c') $type = 'タイプ C';

私はそれを単純な if および else if 文字列として読みました。私はそれを次のように変換しました:

if($type == 'a') {
  $type = 'タイプ A';
} それ以外の場合 ($type == 'b') {
  $type = 'タイプ B';
} それ以外の場合 ($type == 'c') {
  $type = 'タイプ C';
}

それはかなり簡単だと思いましたが、実際には異なる結果が得られています。上記の 2 つのスニペットの違いは何ですか?

4

6 に答える 6

4

それらは完全に同一であり、違いは別の場所にあるはずです。

前後のコードのコピペですか?

私はanubhavaに同意しますが、明確にするためにそれをスイッチケースに変換する傾向があります:

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

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

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

  default:
    break;
}
于 2011-03-17T21:03:08.130 に答える
1

$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;
}

そうすれば、状況に応じて、望ましくないデータがどうなるかを常に確認できます。開発モードでは、常にデフォルトを設定します。

于 2011-06-18T05:42:07.563 に答える
1

それらは同一である必要があります。テストファイルを作りますが、その事実が変わるとは思えません...

おっと、テストファイルを作成しました:

<?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
于 2011-03-17T21:04:16.780 に答える
1

上記のコードを単純化するには、最初にphpスイッチケースが必要だと思います。

私はあなたのコードの2つのバージョンのコードの違いを見つけられなかったことを言及しなければなりません。大文字と小文字を切り替えると、多くの if、else if、else if ステートメントよりも読みやすくなります。

于 2011-03-17T21:04:21.433 に答える
1

これは実際には省略構文ではありません。これは単なる if/else if/else if で、各セクションにはステートメントが 1 つしかないため、セットは必要ありません{}

改行でフォーマットすると、少し明確になります。

if($type == 'a')
    $type = 'Type A';
else if($type == 'b')
    $type = 'Type B';
else if($type == 'c')
    $type = 'Type C';
于 2011-03-17T21:10:16.763 に答える
0

それらは同じですが、エラーは別の場所にあります。

于 2011-03-17T21:06:07.443 に答える