0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP-制御構造

Last updated at Posted at 2022-11-03

PHP-制御構造

  • 制御構造に関する公式ドキュメント

・要件(前提条件、使用環境)
 ・PHPが導入済み
 ・VSコードを導入済み
 ・dockerを導入済み
 ・Xdebugが導入済み
 ・Composerが導入済み

  1. 前提知識
    ・$変数名= 値;
    ・$変数名= 式; 値をもつもの
    ・文は末尾に「;」がついたもの、もしくは中括弧で囲まれたもの
    ・構文は文法・書式のこと。
    ・Syntax error とは、構文エラーという意味
    ・言語構造は、言語を構成する要素のこと( PHPのキーワード )
    ・制御構造は、プログラムの流れを制御するもの。言語構造の一種
  2. 条件分岐
    2-1. if
      比較演算子で真偽値で判定、論理型変数で直接判定、暗黙的変換し判定、複数条件で判定
    2-2.switch
      同じ変数を複数の値で条件分岐したいときに使う
      ※注意 緩やかな型変換される
    2-3.match
      同じ変数を複数の値で条件分岐し、値を代入したいときに使う
      ※厳密な比較で処理される

3.繰り返し処理

  • foreach
    配列の全要素に対して繰り返しで使う
    ※開発でよく使うことがある
sample.php
$nummer[1,2,3,4]
foreach () {
    echo $number *2 . PHP_EOL;
} // 2 4 6 8
  • for
    決められた回数分の繰り返し処理
sample.php
for ($i = 1; $1 <= 10; $++) {
    echo $i;
} //1 2 3 ...10
  • while
    ある条件を満たす間だけ繰り返す
sample.php
$i = 0;
while($i < 100){
    i +1;
}
  • breakとcontinue
    breakはループを抜けたいときに使う
    continueはループをスキップしたいときに使う
sample.php

  • HTMLと混ぜて使うとき
    if,switch,foreach,for,whileには波括弧を使わない記法が存在する
sample.php
<?php if ($num === 10) { ?>
  <p>$numは10</p>
<?php } ?>

sample.php
<?php if ($num === 10) : ?>
  <p>$numは10</p>
<?php endif; ?>

3. コードの順番

  • コードの順序に依存性がある時は、依存性が明確にする
  • コードの順序に依存性がない時は、関連するコードをまとめる
    - コードを上から下に読みやすくする
sample.php

4. 条件分岐

  • 正常なケースを先に書き、エラーケースをあとに書く
sample.php

  • else句が必要かどうかよく確認する
    ※海外の論文によると、50%の割合でelse句が必要になる場合ある
sample.php
$myasqli = mysqli_connect();
if() {
  
}

  • 複雑なif-elseifの場合
     - 複雑な条件式は関するにする
sample.php

  - 一般的なケースを最初に書く

sample.php
if(isLetter($inputName)){
}
  • switch 文でcaseがたくさん登場するときは、caseの順番に気をつける
     - 順番
      + 正常なケースを先頭にする
      + よく登場するものから記載する。
      + アルファベット順や数値順に書く
     - その他
      + 全てのケースを網羅する
      + defalut句はその他扱いの時に指定する
      + 各ケースの処理は関数は使ったりして短くして書く
sample.php

5. 繰り返し処理

  • foreach
    配列の全要素に繰り返し処理をする

  • for
    決まった回数だけ繰り返し処理をする

  • while
    繰り返し処理を何回したいかわからない時使用する

  • 繰り返し処理のポイント
    複雑になりやすいため、単純にする
     - 開始
      + 初期化コードはループの直前に置く
      + 無限ループにはwhile(ture)を使う
     - 本文
      + ループのネストは3段階まで
      + ループの前処理・後処理は先頭か末尾にまとめる
       例)ループの回数を数えたい時
      + ループ1回に1つの機能(処理)
      + ループは20~50行以内にする
     - 終了
      + 全てのケースでループが終了することを確認する
      + ループの開始時と終了時をシュミレーションする※(脳内・紙に書く)

  • 繰り返し処理のコツ
    ループは内から外へ書くと混乱しにくい
     - 日本語で本文の処理を書く
     - コードに置き換える
     - ループで囲む
     - 変数の初期化等を追記する

sample.php
<?php

6. 制御構造によくある問題

  • 複雑な式
     - ブール変数やブール関数を使ってシンプルにする
sample.php
<?php

  • 否定的な論理式
    • 否定的な理解は時間がかかるため、肯定的な論理式にする(迷ったらド・モルガンの法則を使う)
sample.php
<?php

  • 括弧のない複雑な論理式
     - 複雑な論理式は括弧を使うと意味が明確になる

  • 数値を含む式
     - 数値を含む式は数直線上に並べる

  • 深いネスト
     - 深いネストはコードが読みにくいので、2~3段階までにする

複雑さの測定

  • 初期値は1
  • if,for,while,&&,|| が登場するたびに1を足す
  • case の選択肢ごとに1を足す
  • 1~5 個:処理は適切
  • 6~10個: 単純にできないか検討
  • 11個~ :処理の一部を関数に分割
参考資料

PHPUnitドキュメント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?