PHPの基本知識をゼロから学ぶハンズオン学習

HelloWorldを表示してみよう

目次

1. HelloWorldを表示してみよう
2. コメントアウト
3. 改行

1. HelloWorldを表示してみよう

PHPを使用してHelloworldをブラウザに表示してみます。
拡張子はphpとしてください。「hello.php」
作成されたphpファイル内に以下のHTMLを準備します。
なお、はじめに「!」を入力し、Enterを押下すると、自動生成されます。
※<?php ?>だけで記述できますので、以降のカリキュラムではHTMLの記述部分は省いで解説していきます。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
</body>
</html>

bodyタグ内に<?php ?>を入力します。
このphpタグ内においてPHPの処理を記述していきます。
ブラウザに表示したい場合は、「echo」か「print」を使用しますが、以降は「echo」を使用します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
        echo "HelloWorld";
    ?>
</body>
</html>

ブラウザにHelloWorldが表示されました。

2. コメントアウト

PHPもコードをコメントアウトできます。
コメントアウトすることにより、その部分は処理されません。
以下のコードは、2行目で変数printStrに「PHP」で初期化を行い、その後3行目で「JavaScript」を代入しています。
そのため、「JavaScript」が表示されます。

<?php
    $printStr = "PHP";
    $printStr ="JavaScript";
    echo $printStr;
?>

ここで3行目を「//」によりコメントアウトすると、「PHP」が表示されます。

<?php
    $printStr = "PHP";
    // $printStr ="JavaScriptに書き換え";
    echo $printStr;
?>

3. 改行

以下のコードを表示してみます。

<?php
  echo "PHP";
  echo "JavaScript";
?>

つながって表示されました。

これは意図的に改行を行う必要があります。「echo “<br>”;」を使用します。

<?php
  echo "PHP";
  echo "<br>";
  echo "JavaScript";
?>

データ型

目次

1. データ型
2. null

1. データ型

「HelloWorldを表示してみよう」のレッスンでは、「HelloWorld」や「PHP」、「JavaScript」をブラウザに表示しました。
これらの表示される文字にはデータ型があり、string型に該当します。
PHPに扱えるデータ型は主に以下のとおりです。

データ型概要
bool論理の真もしくは偽の2種類しかないtrue, false
int整数の値-1, 100, 0など
float
double
小数点の付いた数値-1.1, 55.8, 0.0など
string文字列
” や ‘ で囲む
“PHP”, “テスト”など

2. null

上記のデータ型以外にも「null」というものがあります。
nullは型がない特殊な値で、「何もない」ことを意味します。

変数

目次

1. 変数
2. 型変換
3. エスケープシーケンス
4. 変数の操作を行う関数

1. 変数

1-1. 変数とは

変数とは、数値や文字列などの値を入れるための箱のようなもので、中の値を変更することが可能です。
この変数には、値を1つだけ格納することが可能です。

1-2. 変数の定義

変数を定義する方法は以下のとおりです。
なお、PHPは動的言語のため、Javaのように変数を定義する際にデータ型を指定する必要がありません。

$変数名 = 変数に代入する値;

例文

<body>
    <?php
        $strValue = "テスト文字列型";  //①
        echo $strValue;  //②
        echo "<br>";  //③
        $strValue = "テストあいうえお";  //④
        echo $strValue;  //⑤
    ?>
</body>

① 変数strValueに「テスト文字列型」を代入します。
② ①の変数strValueを出力します。
③ 改行を行います。
④ ①の変数strValueに対し、「テストあいうえお」で書き換えます。
⑤ ④で再代入した値を出力します。

1-2-1. 変数の命名規則

変数名を命名する時のルールとして、半角アルファベット(a~2、A~Z)、数字、_(アンダーバー)が使用でき、大文字と小文字を区別します。
変数名は自由に付けることができますが、$の次が数字や、PHPにあらかじめ定義されている予約語は名前に付けられません。
開発現場では、そのプロジェクトの開発規約に沿って定義しますが、変数名は基本的にはキャメルケースを使用します。

1-3. 変数にデータ型の異なる値を再代入

string型が代入されている変数に、int型を再代入することもできます。

<body>
    <?php
        $strValue = "テスト文字列型"; //①
        echo $strValue;
        echo "<br>";
        $strValue = 1;  //②
        echo $strValue;
    ?>
</body>

① 変数strValueにstring型の「テスト文字列型」を代入します。
② 変数strValueにint型の「1」を再代入します。

このように、PHPでは同一の変数に、型が異なる値を代入できます。

1-4. 変数同士を結合する

変数を結合する場合、その変数のデータ型によって結合する演算子に注意が必要です。

1-4-1. データ型がint型(float型、double型を含む)の場合

以下のコードのような変数が2つあり、その変数を結合していきます。

<body>
    <?php
        $intVal1 = 2; //int
        $intVal2 = 55.3; //int
        echo $intVal1 + $intVal2;
    ?>
</body>

57.3 が出力されます。

1-4-2. データ型がstring型の場合(文字列演算子)

以下のコードのような変数が2つあり、その変数を結合していきます。

<body>
    <?php
        $strVal1 = "値1"; //string型
        $strVal2 = "値2"; //string型
        echo $strVal1 + $strVal2; //変数の結合
    ?>
</body>

すると、エラーが表示されます。

このように、string型の変数を結合する時に「+」を用いると「Uncaught TypeError: Unsupported operand types: string + 」が表示されます。
そのため、string型の変数を結合するには「 . 」を使用します。

<body>
    <?php
        $strVal1 = "値1";
        $strVal2 = "値2";
        echo $strVal1 . $strVal2;
    ?>
</body>

値1値2 が出力されます。

1-5. 文字列の中で変数を展開

“(ダブルクォーテーション)で囲んだ中に 変数名入れると、変数の値を表示できます。

"{$変数名}"

例文

<body>
    <?php
        $intVal = 111;
        echo "変数intValの値は、$intVal です。"; // 変数intValの値は、111 です。が表示
    ?>
</body>

しかし、’(シングルクォーテーション)で囲んだ中に変数名を入れると、変数名が表示されるため注意が必要です。

<body>
    <?php
        $intVal = 111;
        echo '変数intValの値は、$intVal です。'; // 変数intValの値は、$intVal です。が表示
    ?>
</body>

1-6. 変数にnullを代入

「データ型」のレッスンでnullを紹介しました。nullは型がない特殊な値で、「何もない」ことを意味します。
変数はあらかじめ用意しておきたいが値はまだ代入しなくても良い場合にnullを代入したり、変数に値があるが何も代入したくない場合に使用します。

<?php
    $a = null; //変数aをnullで初期化
    echo $a; //何も表示されない
    echo "<br>";
    $a = 10; //変数aに10を代入
    echo $a; //10を表示
    echo "<br>";
    $a = null; //変数aにnullを代入
    echo $a; //何も表示されない
?>

2. 型変換

PHPでは変数等に値を代入すると、その値でその変数のデータ型が自動で決まります。
以下の例のコードでは変数aに10を代入します。10は整数のためint型と判別されます。

$a = 10;  //int型

ここで、あらかじめ型( )内に指定する事ができます。
この変数aは文字列であるstring型として扱われます。

$a = (string)10;  //string型

以下のように、型変換を行う事ができます。
なお、var_dump()は、変数の型や値の情報を確認できる関数であり、後述の「4. 変数の操作を行う関数」で紹介します。

<?php
    $a = 10; //int型
    var_dump($a); //int(10) を表示
    echo "<br>";
    $a = (string)10; //int型からstring型へ型変換
    var_dump($a); //string(2) "10" を表示
?>

3. エスケープシーケンス

エスケープシーケンスは通常の文字列で表示できないような文字列を表示したい場合に使います。PHPで利用できるエスケープシーケンスは、次のようなものがあります。

エスケープシーケンス概要
\n改行
\rキャリッジリターン
\tタブ
¥文字
\$$文字
\(半角左カッコ
\)半角右カッコ
\[半角左角カッコ
\]半角右角カッコ
\’シングルクォーテーション
\”ダブルクォーテーション

4. 変数の操作を行う関数

関数とは、計算などある処理を行うコードのかたまりのようなイメージです。
PHPにはあらかじめ変数の操作を行う関数が用意されています。

4-1. 変数の型や値の情報を確認(var_dump関数)

var_dump関数は、( )内に入れた変数の型や値の情報を返します。

var_dump(変数)

例文

<body>
    <?php
        $value = 111;
        echo var_dump($value); //①
    ?>
</body>

① int(111) が出力されます。これはint型で、値が111を意味します。

4-2. 変数を削除する(unset関数)

unset関数は、変数そのものを削除します。

unset(削除したい変数);

5. 変数のスコープとは

変数のスコープとは有効範囲のことで、「{ }(ブロック)」内でその変数が使用できる有効範囲です。
そのため、このスコープ内で同名の変数を定義することができません。

演算

目次

1. 四算演算子
2. 複合代入演算子
3. 単項演算子(インクリメント、デクリメント)
4. 比較演算子
5. 論理演算子

1. 四算演算子

1-1. int型やdouble型の四算演算子

PHPでは算術演算等を行うことができ、演算には演算子の記号を使用します。

演算の種類演算子の記号記述例
加算+2 + 1
減算2 – 1
乗算*2 * 1
除算/2 / 1
剰余%2 % 1

例文

<?php
    /* 加算 */
    echo 2+1; // 3が表示される
    /* 減算 */
    echo 2-1; // 1が表示される
    /* 乗算 */
    echo 2*1; // 2が表示される
    /* 除算 */
    echo 2/1; // 2が表示される
    /* 剰余 */
    echo 2%1; // 0が表示される
?>

1-2. string型の数字を四算演算子

PHPでは、string型の数字を四算演算子すると、「1-1. int型やdouble型の四算演算子」と同じ結果を得られます。
※Java言語では結果が異なりますので注意が必要です。

<?php
    /* 加算 */
    echo "2"+"1"; // 3が表示される
    /* 減算 */
    echo "2"-"1"; // 1が表示される
    /* 乗算 */
    echo "2"*"1"; // 2が表示される
    /* 除算 */
    echo "2"/"1"; // 2が表示される
    /* 剰余 */
    echo "2"%"1"; // 0が表示される
?>

では、string型の数字「”2″」と「”1″」を用いて「21」にしたい場合、「+」の代わりに「.」を使用します。

<?php
    // 加算
    echo "2"."1"; // 21が表示される
?>

2. 複合代入演算子

複合代入演算子とは、=演算子と他の演算子を組み合わせて、代入と同時に演算を行う演算子をいい、次のような複合代入演算子があります。

複合代入演算子概要記述例該当する演算
+=$aに$bの値を加算して代入$a += $b$а = $а + $b
-=$aに$bの値を減算して代入$a -= $b$а = $а – $b
*=$aに$bの値を乗算して代入$a *= $b$а = $а * $b
/=$aに$bの値を除算して代入$a /= $b$а = $а / $b
%=$aに$bとの剰余演算の結果を代入$a %= $b$а = $а % $b
.=$aに$bの値を連結して代入
(文字列として扱われる)
$a .= $b$а = $а . $b

3. 単項演算子(インクリメント、デクリメント)

変数に1を足す、もしくは引くだけの処理を行う際、変数の前後どちらかに「++」を付けた処理をインクリメント、変数の前後どちらかに「–」を付けた処理をデクリメントといいます。

インクリメント

$変数名++;

デクリメント

$変数名--;

4. 比較演算子

比較演算子は、ある値と別の値を比較し、その結果をtrueまたはfalseで返します。
主な比較演算子は以下のとおりです。

比較演算子概要
$a == $b型の相互変換をしたあと、$aが$bと等しい場合はtrue
$a === $b$aが$bに等しく同じ型である場合はtrue
$a != $b型の相互変換をしたあと、$aが$bと等しくない場合はtrue
$a <> $b型の相互変換をしたあと、$aが$bと等しくない場合はtrue
$a !== $b$aが$bと等しくないか、同じ型でない場合はtrue
$a < $b$aがSbより小さい場合はtrue
$a > $b$aが$bより大きい場合はtrue
$a <= $b$aが$b以下の場合はtrue
$a >= $b$aが$b以上の場合はtrue

5. 論理演算子

論理演算子とは、ある値と別の値を「および」や「または」で評価し、その結果をtrueまたはfalseで返します。
主な論理演算子は以下のとおりです。

論理演算子概要
$a and $b$aと$bがどちらもtrueの場合、true
$a && $b$aと$bがどちらもtrueの場合、true
$a or $b$aまたは$bのどちらかがtrueの場合、true
$a || $b$aまたは$bのどちらかがtrueの場合、true
$a xor $b$aまたはSbのどちらかがtrue、かつ両方ともtrueでない場合、true
! $a$aがtrueでない場合、true

配列

目次

1. 添字配列
2. 添字配列の操作
3. 連想配列
4. foreach文

1. 添字配列

1-1. 配列とは

変数は、一度に複数のデータを扱う事ができませんが、配列を使用すると、複数のデータを扱う事ができます。

1-2. 添字配列の定義

配列を定義する方法は以下のとおりです。

$変数名 = [値1, 値2, 値3];

配列に代入された値を要素といいます。

例文

<body>
    <?php
        $arr = ["A", "B", "C"]; //①
    ?>
</body>

① 配列arrに「1」「2」「3」を代入します。

1-3. 添字配列の値へのアクセス

配列内の各値は、添え字により値の一対のペアで構成されています。
この添え字は「0」から始まります。

例文

<?php
    $arr = ["A", "B", "C"];
    echo $arr[0]; //値の0番目にアクセス、Aを表示
    echo $arr[1]; //値の1番目にアクセス、Bを表示
    echo $arr[2]; //値の2番目にアクセス、Cを表示
?>

2. 添字配列の操作

2-1. 添字配列の初期値を確認

配列に格納されている初期値を全て確認したい場合、echoで表示しても正しく表示されません。そのときはprint_r()を使用します。

<?php
    $arr = ["A", "B", "C"];
    echo $arr; //Arrayが表示
    print_r($arr); //Array ( [0] => A [1] => B [2] => C )が表示
?>

2-2. 要素数を取得

配列の長さは、count関数で求める事ができます。

<?php
    $arr = ["A", "B", "C"]; //配列に値3つを格納
    $size = count($arr); //count関数により配列内の要素数を取得
    echo $size; //要素数である「3」が表示される
?>

2-3. 値の情報を修正

値の情報を修正するには、修正したい値の添え字を指定します。

<?php
    $arr = ["A", "B", "C"];
    $arr[1] = "Z";
    print_r($arr); //Array ( [0] => A [1] => Z [2] => C )が表示
?>

2-4. 添字配列の末尾に要素を追加

PHPの配列は、格納される要素の数を可変させることが許されています。
そのため、追加や削除が可能です。
array_push()を使用します。

<?php
    $arr = ["A", "B", "C"];
    array_push($arr, "Z");
    print_r($arr); //Array ( [0] => A [1] => B [2] => C [3] => Z )
?>

2-5. 添字配列の末尾の要素を削除

配列の末尾の要素を削除は、array_pop()を使用します。

<?php
    $arr = ["A", "B", "C"];
    array_pop($arr);
    print_r($arr); //Array ( [0] => A [1] => B )
?>

2-6. 添字配列の先頭に値を追加

配列の先頭に値を追加するには、array_unshift()を使用します。

<?php
    $arr = ["A", "B", "C"];
    array_unshift($arr, "Z");
    print_r($arr); //Array ( [0] => Z [1] => A [2] => B [3] => C )
?>

2-7. 添字配列の先頭の要素を削除

配列の先頭に要素を削除するには、array_shift()を使用します。

<?php
    $arr = ["A", "B", "C"];
    array_shift($arr);
    print_r($arr); //Array ( [0] => B [1] => C )
?>

2-8. 指定した添え字の配列の要素を削除

指定した添え字の配列の要素を削除するには、unset()を使用します。

<?php
    $arr = ["A", "B", "C"];
    unset($arr[1]);
    print_r($arr); //何も表示されない
?>

2-9. 配列の添え字を振りなおす

配列の添え字を振りなおすには、array_values()を使用します。

<?php
    $arr = ["A", "B", "C"];
    print_r($arr); //Array ( [0] => A [1] => B [2] => C )
    unset($arr[1]);
    print_r($arr); //Array ( [0] => A [2] => C )
    $format =  array_values($arr);
    print_r($format); //Array ( [0] => A [1] => C )
?>

2-10. 添字配列の分割

1つの配列をarray_slice()で分割することができます。

array_slice(配列名, 開始添え字位置, 切り取る長さ, 添え字の保持有無)
<?php
    $arr = ["A", "B", "C"];
    $format =  array_slice($arr, 0, 1); 
    print_r($format); //Array ( [0] => A )
?>

2-11. 添字配列の結合

array_merge()により配列を結合することができます。

<?php
    $arr1 = ["A", "B"];
    $arr2 = ["Y", "Z"];
    $result = array_merge($arr1, $arr2);
    print_r($result); //Array( [0] => A [1] => B [2] => Y [3] => Z )
?>

3. 連想配列

配列は添え字で値を指定していましたが、連想配列では任意のキーを指定することでそのキーに関連付けられた値を呼び出すことができます。

3-1. 連想配列の定義とアクセス

次のように定義します。

配列名 = [キー1=>値1, キー2=>値2,キー3=>値3];

例文

<?php
    $arr = ["JPN"=>"日本", "USA"=>"アメリカ"];
    print_r($arr); //Array ( [JPN] => 日本 [USA] => アメリカ ) 
    echo $arr["JPN"]; //日本
    echo $arr["USA"]; //アメリカ
?>

3-2. 連想配列に追加

追加するには、以下のようにします。

配列[追加するキー] = "追加する値";

3-3. 連想配列の要素を削除

削除するには、以下のようにします。

unset(配列名[削除するキー]);

3-4. 連想配列の値を修正

値を修正するには、修正したいキーを指定します。

配列名[修正したいキー] = 修正する値;

4. foreach文

連想配列は添字配列と違い、数値がないためforループが使用できません。
そのため、配列の要素を1つずつ順番に取り出すforeach文を使用します。

4-1. 要素を取得

配列の要素を1つずつ順番に取り出す

foreach(配列名 as キーの変数 => 値の変数) {
    繰り返す処理;
}

4-2. 値を取得

配列の値を1つずつ順番に取り出す

foreach(配列名 as 値の変数) {
    繰り返す処理;
}

例文

<?php
    $arr = ["JPN"=>"日本", "USA"=>"アメリカ", "GBR"=>"イギリス"];
    foreach($arr as $value) {
        echo $value; // 日本アメリカイギリス
    }
?>

条件分岐

目次

1. 条件分岐とは
2. if文
3. switch文

1. 条件分岐とは

if文は「もし明日晴れだったら公園に行く、雨だったら家で過ごす」というような、条件によって処理を分けたいときに使います。
PHPでの条件分岐には、if文とswitch文があります。

2. if文

2-1. if文

if文による条件分岐は以下のように定義します。

if (条件式) {  //①
  条件式でtrueの時の処理 //②
}

① 条件式には結果がbool型で返されるような式にします。(trueかfalseを返す)
 比較演算子や論理演算子が使用できます。
② 処理は①の条件式により結果がtrueとなった場合に、実行されます。そのため、①がfalseの場合②の処理は実行されません。

例文1

<body>
    <?php
        $intVal = 1;
        if ($intVal == 1) { //①
            echo "変数intValの値は1です";  //②
        }
    ?>
</body>

① 変数intValの値は1であり、if文により1なのかをチェックしています。
② ①のチェックで1なので、②の処理が実行されます。

例文2

<body>
    <?php
        $intVal = 1;
        if ($intVal == 2) { //①
            echo "変数intValの値は1です";  //②
        }
    ?>
</body>

① 変数intValの値は1であり、if文により2なのかをチェックしています。
② ①のチェックで2なので、②の処理は実行されません。

2-2. else文

上記の2-1. if文の例文2で、条件式の結果がfalseのときなので何も処理されませんでした。
ここで、else文を使用するとfalseの場合の処理を行うことができます。

if (条件式) {
  条件式でtrueの時の処理
} else {
  条件式でfalseの時の処理
}

例文

<body>
    <?php
        $intVal = 2;
        if ($intVal == 1) {
            echo "変数intValの値は1です";
        } else {
            echo "変数intValの値は1ではありません";
        }
    ?>
</body>

変数intValの値は1ではありません が出力されます。

2-3. else if文

if~else の処理の場合2分岐のみですが、if elseを使うことで3つ以上の条件分岐を記述することができます。
else if文はいくつでも定義できます。
ここで注意すべきなのが、コードは上から下へ順に処理され、またif文は条件式でtrueと評価されると以降のelse ifの条件式は評価せずにそのif文を抜けます。そのため、上から条件に厳しい条件式を定義すると良いです。

if (条件式A) {
  条件式Aでtrueの時の処理
} else if (条件式B) {
  条件式Bでtureの時の処理
} else {
  上記の条件式全てでfalseの時の処理
}

例文

<body>
    <?php
        $intVal = 2;
        if ($intVal == 1) {
            echo "変数intValの値は1です";
        } else if ($intVal == 2) {
            echo "変数intValの値は2です";
        } else {
            echo "変数intValの値は1と2以外です";
        }
    ?>
</body>

2-4. if文のネスト

ネストとは、入れ子構造を意味し、if文の中にif文を記述できます。
いくつでも定義することができますが、複雑さや可読性などを考慮しあまり多くし過ぎるのも良くありません。

<?php
    if (条件式){
        if (条件式){
        }
    }
?>

3. switch文

switch文による条件分岐は以下のように定義します。

switch (値) { //①
  case 値1: //② 値はcaseの値1と同じかをチェック
    処理1; //③
    break; //④
  case 値2: //② 値はcaseの値2と同じかをチェック
    処理2; //③
  case 値3: //② 値はcaseの値3と同じかをチェック
    処理3; //③
    break; //④
  default: //⑤
    上記のcaseに該当しない場合の処理
}

① caseと比較する値を指定します。
② caseはswitchの値と比較され、同じであれば③の処理を行います。
③ ②のcaseで一致(true)した場合、その処理を行います。
④ breakは、そのcaseの処理を抜けます。すなわち、breakに到達しなければ処理を抜けないことを意味するため、case2にはbreakがないため、case3の処理も実行されます。
⑤ defaultは、caseに該当しない場合に実行されます。

繰り返し処理

目次

1. 繰り返し処理とは
2. for文
3. while文
4. 無限ループ

1. 繰り返し処理とは

1〜100の数字を表示したい場合、以下のようにすると表示できます。

echo 1;
echo "<br>";
echo 2;
echo "<br>";
 // 3~99は省略
echo 100;

しかし、面倒です。
その時にPHPでは繰り返し処理によるfor文またはwhile文を使用します。

2. for文

for文による条件分岐は以下のように定義します。

for (初期化式; 条件式; 更新式) {  //①
  for文の条件式でtrueの際、繰り返される処理 //②
}

① 初期化式には、for文の処理のスタート地点を指定します(最初の一度だけ実行)
  条件式には、for文による繰り返し処理がどのくらいまで行うかの条件を指定します。
  更新式には、{ }内の処理を実行したあとに行われます。
② 処理は①の条件式により結果がtrueとなった場合に、実行されます。そのため、①がfalseの場合②の処理は実行されません。

例文

「1. 繰り返し処理とは」で出題した参考コードを、for文に置き換えてみます。
1からスタート($i = 1;)し、100まで処理を繰り返します($i <= 100;)。なので、100まではtrueの評価となります。
for文内の処理が終わると、初期化式の数値から1ずつ増えていきます($i++)。
条件式が101となるとfalseの評価となりこのfor文を抜けます。

for ($i = 1; $i <= 100; $i++){
    echo $i;
    echo "<br>";
}

2-1. for文のネスト

for文もif文と同様にネストすることができます。

<?php
    for (初期化式; 条件式; 更新式){
        for (初期化式; 条件式; 更新式){
        }
    }
?>

3. while文 と do-while文

3-1. while文

while文による条件分岐は以下のように定義します。

初期化式 //①
while (条件式) { //②
  while文の条件式でtrueの際、繰り返される処理 //③
  更新式 //④
}

① 初期化式には、while文の処理の最初に、一度だけ実行されます。
② 条件式には、while文による繰り返し処理の条件を指定します。
③ 処理は②の条件式により結果がtrueとなった場合に、実行されます。そのため、②がfalseの場合②の処理は実行されません。
④ 更新式には、{ }内の処理を実行したあとに行われます。

例文

「1. 繰り返し処理とは」で出題した参考コードを、while文に置き換えてみます。

while ($i <= 100) {
  echo $i;
  echo "<br>";
  $i++;
}

3-2. do-while文

do-while文による条件分岐は以下のように定義します。

do {
  処理 //①
} while (条件式); //②

① whileの条件式判定より前にdo{ } 内の処理が実行されます。
② ①の処理後に条件式判定を行います。以降の処理はwhile文と同じです。

4. 無限ループ

無限ループとは、処理が限りなく繰り返されるループ処理のことです。
条件式が常にtrueとなっており、無限に処理が繰り返されます。このような場合、サーバーを停止、Webブラウザもしくはタブを閉じなければ処理が終了しませんが、後述のbreakで無限ループを抜けることができます。

4-1. break

ループの処理を途中で抜けるには、break文を使います。
break文を使うとループから強制的に抜けることが可能です。なお、for ループでもdo~while ループで同様にbreak文を使えます。

<?php
    $value = 0; //①
    while(true) { //②
        echo "無限ループ中<br>"; //③
        $value++; //④
        if($value === 5) { //⑤
            break; //⑥
        }
    }
?>

① 変数valueに0で初期化(0からスタート)
② 条件式をtrueにし、無限ループを意図的に発生
③ 無限ループ中を表示
④ 0から1ずつ増えていく
⑤ 条件分岐により変数valueの値が5のときにtrueとする
⑥ ⑤の条件分岐がtrueのとき、breakによりwhile文を抜ける

関数

目次

1. 関数
2. デフォルト引数値

1. 関数

1-1. 関数とは

関数とは、計算を行う処理など何度でも再利用可能な処理をまとめたものを定義することができます。

1-2. 関数の定義

関数の定義には以下のように定義します。

function 関数名(引数) { //①
    処理
    return 返す値; //②
}

① 引数は省略でき、またカンマで区切って複数指定できます。
 この受け取った引数を使用して関数内の処理に使用していきます。
② returnは戻り値であり、関数の処理結果をこの関数を呼び出した元へ返します。省略可能です。
またreturnは処理制御を戻す意味もあり、このreturn直後にコードを記述すると到達できないコードとなりエラーになります。

1-3. 関数の呼び出し

関数の呼び出しには、関数名と引数の数を定義されている関数の数に合わせることで、呼び出すことができます。
例文

<?php
    $result =  avg(7, 5); // avg関数の呼び出し
                          // その結果6を変数resultに格納
    echo $result;

    /* 
    * 平均を計算する関数
    * $val1 第一引数(今回は7がセット)
    * $val2 第二引数(今回は5がセット)
    * return 計算結果(今回は6が戻り値)
    */
    function avg($val1, $val2) {
        $result = ($val1 + $val2) / 2.0;
        return $result;
    }
?>

2. デフォルト引数値

デフォルト引数値とは、関数を呼び出す際に引数が指定されなかった場合、引数に入れる値のことです。

2-1. デフォルト引数値の定義

デフォルト引数値の定義は以下のように行います。

function 関数名(引数=デフォルト引数値) {
}

例文

<?php
    $result =  avg(); // avg関数の呼び出し
                      // その結果6を変数resultに格納
    echo $result;

    /* 
    * 平均を計算する関数
    * $val1 第一引数
    * $val2 第二引数
    * return 計算結果
    */
    function avg($val1=7, $val2=5) { //デフォルト引数値で処理される
        $result = ($val1 + $val2) / 2.0;
        return $result;
    }
?>

フォーム

目次

1. フォームとは
2. HTTPリクエスト・HTTPレスポンスとは
3. HTTPリクエスト
4. HTTPリクエストの値確認
5. API

1. フォームとは

フォームとは、決められた形式で必要項目にデータの入力や選択を効率よくできるように作成された入力欄、Webページ、アプリの入力画面を指します。

このフォームはユーザーが入力した情報を送信ボタンを押下することで、WebサーバにHTTPリクエストとして送られます。

2. HTTPリクエスト・HTTPレスポンスとは

下図において、フォームはWebブラウザに当たります。

① リクエストは、WebブラウザからWebサーバに対して出される依頼です。
② Webサーバで、リクエストされた内容からあらかじめ決められた処理を行い、その結果を返します。
 リクエストされた情報をDBに登録し完了したら、「登録が完了しました」のメッセージを返すなど
③ リクエストに対するWebサーバからの返事
 「登録が完了しました」のメッセージをWebブラウザに表示されるなど

3. HTTPリクエスト

HTTPリクエストには、複数のHTTPリクエストメソッドがあります。
今回挙げているのは一部ですが、その他のHTTPリクエストメソッドはこちらをご覧ください。

HTTPリクエストメソッド概要
GETURLにパラメータという情報を付与してデータを送信する方法。
URLの中に情報が埋め込まれるため、データの取得時のみ使用。
POSTURLの中に情報を埋め込まずにデータを送信する方法。
個人情報やログイン情報を入力するような秘匿情報を送信するときに使用。
PUTHTTPを通じてサーバ上のリソース(ファイルなど)の追加あるいは上書き保存を指示するためのメソッド。
DBの情報更新などで使用。
DELETEHTTPを通じてサーバ上の指定した資源(ファイルなど)の削除を行うよう依頼するメソッド。
DBの情報削除などで使用。

3-1. GETリクエストによるフォーム送信

ブラウザで入力された情報をGETリクエストを使用して送信し、その結果をブラウザで表示するプログラムを作成していきます。
下画像は、完成した入力フォーム画面です。

まず、ファイル管理しやすいようにフォルダを作成します。
で新しいフォルダを作成します。
そのフォルダ内に以下の2ファイルを作成します。

  • form.html
  • result.php

今回はHTTPリクエストメソッドの説明なので、各HTMLタグについての説明は省略します。

form.html

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Demoフォーム</title>
</head>
<body>
    <h1>Demoフォーム</h1>
    <form method="GET" action="result.php"> //①
        <div>
            <p>名前</p>
            <input type="text" name="name" placeholder="名前を入力"/>
        </div>
        <div>
            <p>性別</p>
        </div>
        <div>
            <input type="radio" name="gender" value="男性" checked="default"/>男性
            <input type="radio" name="gender" value="女性"/>女性
        </div>
        <div>
            <p>計算を行います、1〜10までの数字を入力してください。</p>
            <input type="number" name="num1" min="0" max="10" value="0"/>+
            <input type="number" name="num2" min="0" max="10" value="0"/>
        </div>
        <br>
        <input type="submit" value="送信"> //②
    </form>
</body>
</html>

① フォーム中の情報はformタグを使用して送信します。
 method属性にはHTTPリクエストメソッドを指定します。
 action属性にはformの情報の送信先を指定します。
② type属性にsubmitを指定し、このボタンを押下することでformの情報が送信されるようにしています。
 value属性はボタンに表示される文字です。

次にform.htmlで入力された情報を処理するphpファイルに処理をコーディングしていきます。
result.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結果</title>
</head>
<body>
    <h1>フォームで送られた結果</h1>
    <p>名前は<?php echo $_GET["name"] ?>です。</p>
    <p>性別は<?php echo $_GET["gender"] ?>です。</p>
    <div>
        <?php
            $result = $_GET["num1"] + $_GET["num2"];
            echo "計算結果:{$result}";
        ?>
    </div>
</body>
</html>

GETリクエストの値は、$_GETで受け取る必要があります。

$_GET["取得したいinputタグのname属性"]

form.htmlで情報が入力されresult.phpへGETリクエストされ、その結果がレスポンスとなりWebブラウザに表示されます。

URLに注目すると、?の後にフォームで送られた情報がパラメータとして記載されています。このようにGETリクエストはURLに反映されてしまうため、個人情報などの秘匿情報を扱う場合は使用しません。

3-2. POSTリクエストによるフォーム送信

次にブラウザで入力された情報をPOSTリクエストを使用して送信し、その結果をブラウザで表示するプログラムを作成していきます。
先程のGETリクエストのプログラムを利用していきます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Demoフォーム</title>
</head>
<body>
    <h1>Demoフォーム</h1>
    <form method="POST" action="result.php">
        <div>
            <p>名前</p>
            <input type="text" name="name" placeholder="名前を入力"/>
        </div>
        <div>
            <p>性別</p>
        </div>
        <div>
            <input type="radio" name="gender" value="男性" checked="default"/>男性
            <input type="radio" name="gender" value="女性"/>女性
        </div>
        <div>
            <p>計算を行います、1〜10までの数字を入力してください。</p>
            <input type="number" name="num1" min="0" max="10" value="0"/>+
            <input type="number" name="num2" min="0" max="10" value="0"/>
        </div>
        <br>
        <input type="submit" value="送信">
    </form>
</body>
</html>

formタグのmethod属性をGETからPOSTに変更しました。
result.phpもPOSTリクエストを取得できるように修正します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結果</title>
</head>
<body>
    <h1>フォームで送られた結果</h1>
    <p>名前は<?php echo $_POST["name"] ?>です。</p>
    <p>性別は<?php echo $_POST["gender"] ?>です。</p>
    <div>
        <?php
            $result = $_POST["num1"] + $_POST["num2"];
            echo "計算結果:{$result}";
        ?>
    </div>
</body>
</html>

POSTリクエストの値は、$_POSTで受け取る必要があります。

$_POST["取得したいinputタグのname属性"]

では、結果のブラウザを確認してみます。

URLを確認すると、フォーム情報が記載されていません。このようにPOSTリクエストは秘匿情報を扱う際に使用します。

4. HTTPリクエストの値確認


$_POSTや$_GETの値の有無を確認するには、isset()を使用します。
引数に指定した変数に値が設定されており、かつ nullではない場合にtrueを返します。

isset(変数)

5. API

クラスとオブジェクト

目次

1. オブジェクト指向
2. クラス

1. オブジェクト指向

「もの」や「物体」を英訳するとオブジェクトと言い、オブジェクト指向のオブジェクトはここから来ています。
この剣を持ったキャラクターを想像してみてください。

このキャラクターには、名前や体力、攻撃をする動作、移動をする動作などがあります。
キャラクター自体をオブジェクトといい、名前や体力などキャラクター固有の情報をプロパティ、攻撃をする動作や移動をする動作など他のキャラクターと共有できる操作をメソッドといいます。
また、このプロパティとメソッドをまとめてメンバといいます。

プロパティ・名前
・体力
メソッド・攻撃の動作
・移動の動作
・休むの動作

このように、オブジェクト毎に管理し、それらを組み合わせてシステムを構築していくことをオブジェクト指向といいます。

2. クラス

「1. オブジェクト指向」でキャラクターを例にオブジェクトについて説明しました。他にもキャラクターが必要なので作成していきたいと考えています。
キャラクターを作成するには設計図が必要であり、この設計図にあたるものをクラスといいます。

2-1. クラスの定義

クラスの定義方法は以下のとおりです。
プロパティとメソッドは複数定義可能です。

class クラス名 {
    プロパティの定義; //①

    function メソッド名(引数) {
        処理
    }
}

① プロパティとはクラス内に定義できる変数です。
② メソッドとはクラス内で利用できる関数のことです。

2-2. プロパティ

2-2-1. プロパティの定義

プロパティの定義方法は以下のとおりです。

アクセス修飾子 プロパティ変数;

※アクセス修飾子については、後の「2-4. アクセス修飾子」で紹介しています。

例文

public $number;
2-2-2. プロパティへアクセス

プロパティにアクセスするには、以下のとおりにします。

変数名 -> メンバ

※「->」はアロー演算子といいます。

2-2-3. $this(擬似変数)

$thisは、自分自身のインスタンスを指す変数であり、プロパティにアクセスすることができます。

$this -> メンバ変数名 -> メンバ は同じ意味

2-3. メソッド

2-3-1. メソッドの定義

メソッドの定義方法は、関数の定義方法と同じです。
関数の「1-2. 関数の定義」をご確認ください。

2-3-2. メソッドの呼び出し

メソッドにアクセスするには、以下のとおりにします。

変数名 -> メソッド名();

2-4. アクセス修飾子

アクセス修飾子とはメンバへのアクセス範囲を指定するもので、PHPには以下3つあります。

アクセス修飾子概要
publicどのクラスからでもアクセス可能
protectedクラス内、または子クラスからアクセス可能
privateクラス内のみからアクセス可能

なお、アクセス修飾子を省略することも可能ですが、省略した場合はpublicとなります。

2-5. 他のPHPファイルを読み込む

他のPHPファイルを読み込むには、require_once()を使用します。

require_once("読み込むPHPファイル");

2-6. インスタンス化

クラスから作成されたオブジェクトのことをインスタンスといいます。
すなわち、クラスが無ければオブジェクトは作成できず、1つのクラスから何個もインスタンスを作成できます。
インスタンスを作成することをインスタンス化といいます。
インスタンス化するには以下のように定義します。

変数 = new クラス名();

1つのクラスから複数インスタンス化することができます。

$demo1 = Demo();
$demo2 = Demo();

demo1とdemo2のインスタンスは共に同じメンバを持っていますが、全く別のオブジェクトとして扱われ、それぞれに対しての影響はありません。

2-7. コンストラクタ

2-7-1. コンストラクタの呼び出し

「2-5. インスタンス化」において、new クラス名();と定義しました。
このインスタンス化を行う際に、「クラス名();」の部分はコンストラクタと呼ばれるメソッドで、一度だけ呼び出されます。

2-7-2. コンストラクタの定義

呼び出し元でインスタンス化を行なった時点で、一度だけ呼び出されます。
コンストラクタの定義方法は以下のとおりです。

function _construct(引数) {
}

カプセル化

目次

1. カプセル化とは
2. アクセスメソッド(getter, setter)

1. カプセル化とは

カプセル化とは、オブジェクトの情報を隠蔽し、不整合を引き起こすような操作を防ぐための仕組みです。
プロパティは原則的に private で外部からアクセスできないようにし、必要があるもののみメソッドを使ってアクセスできるようにします。
このprivateのメンバにアクセスできるメソッドをアクセスメソッドといいます。

2. アクセスメソッド(getter, setter)

2-1. アクセスメソッドとは

アクセスメソッドには、セッター(Setter)と呼ばれる値を設定するためのメソッドと、ゲッター(getter)と呼ばれる値を取得するためのメソッドに分けられます。
読み書き両方を許可するプロパティには、セッター・ゲッターの両方が必要で、クラス内部だけで利用し外部からのアクセスを禁止するようなプロパティの場合アクセスメソッドは定義しません。

2-2. アクセスメソッドの定義

アクセスメソッドの定義方法は、メソッドの定義方法と同じですがgetter, setterが区別できるようにメソッド名の命名には以下のように定義します。

function setメソッド名(引数) {
    $this -> プロパティ = 引数;  //引数からプロパティの値を変更
}

function getメソッド名() {
    return $this -> プロパティ;  //プロパティの値を取得
}

静的メンバ

目次

1. 静的メンバとは
2. 静的メンバの定義
3. 静的メンバの呼び出し
4. self::

1. 静的メンバとは

今までインスタンス化して利用できるメンバの紹介を行なってきました。これに対しインスタンス化することなく利用できるメソッドやプロパティのことを静的メンバ(クラスメンバ)といいます。
インスタンスメンバはインスタンスごとにそれぞれのメソッドとプロパティを持ちますが、静的メンバはクラス1つに対し1つしか持つことができません。

2. 静的メンバの定義

静的メンバを定義するにはstatic修飾子を付与します。

アクセス修飾子 static メンバ名;

3. 静的メンバの呼び出し

静的メンバの呼び出すには、以下のとおりにします。

クラス名::メンバ名;

4. self::

self::は、クラス内の静的メンバを呼び出すときに先頭に付ける修飾子です。selfが自分自身のクラスを表します。

self::メンバ名;

継承

目次

1. 継承とは
2. 抽象クラス
3. オーバーライド

1. 継承とは

継承とは、あるクラスのメンバをほかのクラスに引き継ぐ(継承させる)効果があります。
継承元となるクラスをスーパークラスや親クラス、基底クラスと呼びます。
継承先のクラスを子クラス、サブクラス、派生クラスなどと呼びます。

1-1. 継承の方法

継承を行うには、extendsを使用します。

class サブクラス extends スーパークラス {
}

1-2. protectedアクセス修飾子

アクセス修飾子であるprotectedは、外部からはアクセスできませんが、子クラスからはアクセスを許可する修飾子です。

2. 抽象クラス

2-1. 抽象クラスとは

抽象クラスとは、抽象メソッドが1つ以上定義されたクラスのことです。
抽象なので、メソッド名と引数は定義されているが処理が定義されていない状態です。
なお、抽象クラスでインスタンス化できません。

2-2. 抽象クラス・抽象メソッドの定義

抽象クラス・抽象メソッドを定義するには、abstractを使用します。
抽象メソッドは処理を定義しません。

abstract class クラス名 {
    abstract アクセス修飾子 function 抽象メソッド名(引数);
}

3. オーバーライド

抽象クラスは後に継承され抽象メソッドが実装されることが前提となるクラスです。
なので、継承先であるサブクラス内に抽象メソッドを具象メソッドとなるようにします。このように処理を定義することをオーバーライドといいます。
オーバーライドとは、子クラスで親クラスにあるメソッドと同じ名前、同じ型の引数、同じ型の戻り値を返すメソッドを定義することです。

abstract class SuperClass {
    abstract function method();  //抽象メソッド
}

class SubClass extends SuperClass {
    function method() { //オーバーライド
        // 処理
    }
}

cookieとsession

目次

1. cookie
2. session
3. cookieとsessionの連携
4. sessionの利用方法

1. cookie

cookie(クッキー)とは、Webに関連する情報をブラウザに保存させり仕組みです。
例えば、ログイン認証が必要なサイトがあり、ログイン後一度ページを離れて再度アクセスした際にログイン認証を行うことなくログインした状態となっているのはcookieのおかげです。

2. session

session(セッション)とはWebサーバ内に情報を保存し、複数ページ間で共有する仕組みです。
例えば、ECサイトのカート機能などは、複数の商品ページを移動し、カートに追加した各商品の情報をずっと保持している必要があります。
このような場合、セッションを利用することで、複数ページ間でデータを共有できます。
なお、セッションには生成時にWebサーバでセッションIDと呼ばれるIDが割り振られ、それによって区別されます。

3. cookieとsessionの連携

Webアプリではこのクッキーとセッションを連携させます。
例えば、ECサイトにIDとパスワードを入力してログインすると、サーバからセッションIDが割り振られ、それらの値がクッキーに保存されます。
次回アクセス時には、このクッキーに保存されたIDとパスワードでログインできるうえに、セッションIDがサーバに送付され、そこに紐付けられたカートを開くことができます。
SNS複数人がアクセスした際、それぞれのユーザーを特定できるのは、異なるセッションIDが割り振られるためです。セッションIDによってアクセスするユーザーを特定できるので、複数の人が同時にサイトにアクセスしても、それぞれのユーザーが自分のマイページにアクセスすることが可能なのです。

4. sessionの利用方法

sessionを利用するには以下の手順があります。
① session_start();でセッション処理をスタートする。

session_start();

② session_id()でセッションIDを取得する。

session_id();

③ セッション変数$_SESSION()でセッション情報を保存します。
 セッション変数は、セッションに値を保存するために利用する連想配列が入る特殊変数です。

$_SESSION["data"]

データベース

目次

1. XAMPPのMySQLを起動
2. テーブルの作成
3. SELECT文
4. INSERT文
5. UPDATE文
6. DELETE文
7. サブクエリ(IN句、 EXISTES句)
8.

1. XAMPPのMySQLを起動

XAMPPにはMySQLが含まれています。
起動するには、XAMPP起動後、http://localhost/phpmyadmin/にアクセスします。

1-1. データベースの作成

「データベース」のタブを押下後、データベース名と照合順序を設定し、作成ボタンを押下します。
今回は以下のように設定してDBを作成しました。

  • データベース名:lesson_db
  • 照合順序:utf8_unicode_ci

2. テーブルの作成

「SQL」タブ内でCREATE文を用いて、テーブルを作成します。
今回作成する情報は以下のとおりです。

CREATE TABLE person (
    id INT PRIMARY KEY
    , name VARCHAR(100)
    , age INT  
);

personテーブルで3つのカラムが作成されました。