PHP

01PHPとは?

PHPとは、動的なWebページを生成することができるサーバーサイドのスクリプト言語です。

他のプログラミング言語と比較して、仕様や文法が簡単なため習得しやすいと言われています。

また、MySQLなどのデータベースとの連携が容易なことなどから、Webアプリケーションの開発にもよく使われる有名なスクリプト言語でもあります。

02HTML・JavaScriptとPHPの違い

PHPは動的なWebページを生成するのに対して、HTMLは静的なWebページの表示を行います。「静的なWebページ」とは、いつ誰が見ても同じように表示されるページであり、一方の「動的なWebページ」とはアクセスしたタイミングや状況によって表示内容が変わるページのことです。

PHPの主な特徴として、HTMLで記述したファイルの中に埋め込んで使えることが挙げられます。HTMLで記述された内容の途中にPHPのプログラムを記述するわけです。これによって、PHPとHTMLを別々のファイルとして扱うのではなく、1つのファイルにまとめることができ、容易に動的なWebページを生成することができます。

また、PHPと共に、Webページの生成によく使われるプログラミング言語として、JavaScriptがあります。 PHPがサーバーサイドの言語であるのに対し、JavaScriptはクライアントサイドの言語です。簡単に言い換えると、PHPの処理はWebサーバー側で行われるのに対して、JavaScriptの処理はWebページを参照するユーザー(クライアント)側のブラウザで行われます。ブラウザで処理するということは、ユーザーのPCやスマートフォンのメモリやCPUに依存することとなります。そのため、重い処理は基本的にPHPで記述すべきです。サーバーサイドのPHPは、同じくサーバー側にあるMySQLなどのデータベースと連携することが可能です。

03環境構築

PHPはサーバーサイドの言語なので、JavaScriptとは異なり、サーバー上でのみ動作します。そこで、「Cloud9」に仮想サーバーを立て、その中でPHPを実行します。難しそうに思うかもしれませんが、「Cloud9」上で簡単に行うことができます。

以下に手順を解説します。

04PHPに触れてみよう!

それでは実際にPHPに触れてみましょう。

PHPの記述ルール

PHPでは<?php ?>で囲うというルールがあります。

下の例を見てみましょう。

<?php
    // ここに処理を書く
?>

<?php ?> で囲うことで、その中がPHPで記述されているとコンピュータが認識します。

またPHPのタグの中ではコードを見やすくするためにインデントを1つ下げて見やすくします。

インデントとは?

行の先頭に半角スペースを入れること。(半角スペース4つ分)

「こんにちは」と表示させる

まずはCloud9にの中に新しくPHPファイルを作成してください。

さらに、以下のようにしてその中に「part1」というフォルダを作成しましょう。

ではいよいよPHPファイルを作成し実際に手を動かして記述していきましょう!

ファイルを作るとき拡張子が必要ですが、今までHTMLでは「.html」CSSは「.css」JavaScriptでは「.js」でした。 予想はつくと思いますがPHPでは「.php」という拡張子になります。

ではPart1のフォルダの中に「index.php」というファイルを作ってみましょう。

作成できたら以下のコードを「index.php」の中に以下のコードを記述しましょう。

<?php
    echo "こんにちは";
?>

記述できたら以下のリンクにアクセスしてみてください。

https://{省略}.vfs.cloud9.ap-northeast-1.amazonaws.com/PHP/part1/index.php

画像のように表示されていたら成功です。

ではコードの解説をします。

2行目の「echo」(エコーと読みます)は画面に出力させるために使います。

echo の引数にした文字列や変数の中身を画面に出力できます。

試しに先ほどのコードから「echo」を削除して画面を読み込んでみましょう。何も表示されないはずです。

補足

① 文字列を囲うときは「’ ’」でも「” ”」どっちでもOK!
② 文末には「;」を必ずつけよう!

05変数

プログラムは規模が大きくなると、内部で多くの処理が行われます。

その際、ある計算処理で出したデータをどこかに保存しておかないと、あとで必要になったときに利用することができなくなります。不要だと判断されて勝手に消去されてしまうためです。

せっかくコンピュータが導き出した答えをコンピュータに勝手に消去されては困りますよね。

「これは必要なデータだから保存してください」という命令が 変数 への代入(変数にデータを保存)です。変数は、データを保存しておける箱だとイメージしてください。

現実には、「変数にデータを代入する処理」とは「データをコンピュータのメモリに保存する処理」です。メモリに保存しておけば、データは勝手に消去されなくなります。

しかし、変数に保存していても、プログラムを終了した場合など、一定のルールに基づいて消去されていきます。それだと困る場合は、ファイルに書き込んだり、データベースへ保存することになりますが、その方法については後のレッスンで詳しく説明します。

では変数へ代入して、データを一時的に保存してみましょう。

<?php
    $name = "ススー";
?>

ここで$nameが変数になります。$+変数名で変数を宣言することができます。

変数名に使用できるのは英数字と「_」です。

また数字から始めることはできません。

変数名として良い例

$name1

$_name

$name_1

変数名としてダメな例

$1name

$name-1

コラム

「=」は右辺左辺が同じという意味ではありません。
ここでは右辺の値を左辺に代入するという意味になります。

コラム

変数の代表的な命名方法は以下の2つです。
・スネークケース:アンダーバーで単語を区切る(例:$test_data)
・キャメルケース:大文字で単語を区切る(例:$testData) ※先頭は小文字

注意

<?php
	$hoge = 12;
	$hoge = "テスト";
	echo $hoge ;
  // 「テスト」と出力される。
?> 
同じ変数名を付けてしまうと後に定義されたものが代入されてしまいます。

06データの型

ここまで何の説明もなしに、数値(12など)や文字列(’ススー’など)を扱ってきました。ここでは、PHPが扱えるデータの型について考えてみます。

データの型がなぜ必要なのかというと、型が違うと扱い方も違ってくるからです。型の違うデータの演算を考えてみましょう。 たとえば、10 ÷ あいうえおという型の違うデータ同士の割り算を見たとき、どう思うでしょうか?まったく意味のない演算(そんな演算が本当にできるの?)だと思うことでしょう。

つまり、型が違うもの同士は同じ舞台には立てない(扱いが違う)ということです。コンピュータはさまざまなデータを扱いますが、それぞれのデータの扱い方を判断するためにデータ型という仕組みがあるのです。

データの型は、PHP内部では必要な概念です。データには型があることを覚えておいてください。

数値型(int)

数値型は文字通り数値のことです。

120 などの数字がこの数値型に分類されます。

実数値(浮動小数)

「浮動」という言葉がついていますが、算数・数学で習った普通の小数と変わりありません。小数のデータを 実数 と呼ぶことも多いです。

<?php
    $num = 1.2;
?>

文字列型(string)

PHPにおいて、文字列は非常に重要な役割を果たします。PHPでは、多くのデータが文字列で表現できます。

Webページを思い浮かべてください。画像と映像以外でやり取りするデータは主にテキストデータ(文字列型)です。Googleで検索するのも、SNSで投稿するのも、Webでは基本的にテキストデータでやり取りします。

文字列型は 「‘(シングルクォーテーション)」か「“(ダブルクォーテーション)」で囲って表現します。

<?php
  $string = '文字列型';
  $string2 = "文字列型";
  // 数値も" " または' ' で囲うと文字列型になる
  $string3 = "1";
?>

配列型(array)

複数の値をまとめて管理することができる型です。

JavaScriptでも出てきた配列と同じです。

<?php
    $fruits = ['リンゴ', 'バナナ', 'オレンジ'];
    // リンゴを取り出したいときは$fruits[0]と記述する
?>

連想配列

連想配列では、先ほどの$fruitsの要素1つ1つに名前を付けることができます。

連想配列の基本

  • 連想配列は、 array() で作成するか、[ ](角括弧)で作成します。
  • キー => 値のペアを1つの要素とします。
  • 連想配列は、任意のデータ型のデータを値としてもつことが可能です。
  • 要素と要素はカンマ(,)で区切ります。

例)

<?php
    $fruits = [
        'apple' => 'リンゴ',
        'banana' => 'バナナ',
        'orange' => 'オレンジ',
    ];

    // リンゴを取得したいときは$fruits['apple']と書く
?>

論理値

論理値型の値は2つだけです。true(真)かfalse(偽)だけです。

論理値は、条件分岐(if文など)などで役に立ちます。

<?php
    $t = true;
    $f = false;
    // $true = "true"; これは文字列型になるので注意
?>

NULL型

NULL型の値は1つだけで、 大文字小文字を区別しない定数 null です。

NULLは 空っぽ を意味します。

変数に nullが代入されている場面

  • 変数の用意(宣言)だけをして、何も値を代入しなかったとき
  • 変数に nullを代入したとき

07演算子

データを計算するには演算子が必要になります。さまざまな値に対して足したり比較したりするのが演算子になります。

代入演算子

文字通り代入を行います。

すでに何度も登場しているので簡単なコードの解説だけ載せておきます。

<?php
   $s = 60 * 24;
   $text = "代入されるデータ";
?>

代数演算子

代数演算子は、四則演算と剰余(割り算の余りを求める)の演算を行う演算子のことです。四則演算と剰余で5つあります。

演算子意味
+足し算
引き算
*掛け算
/割り算
%余り算

文字列を連結する演算子

文字列に対する特別な演算子として、文字列の連結を行う.(ドット)演算子があります。2つの文字列をドットでつなぎ、2つの文字列をあわせます。

<?php 
   $name = "ススー";
   $greeting = "私の名前は" . $name . "です。";
   echo $greeting;
   // 私の名前はススーです。
?>

文字列の連結で改行させる 「PHP_EOL」を使うと改行できます。

以下参考

<?php
   $text1 = "1行目";
   $text2 = "2行目";

   $text = $text1 . PHP_EOL . $text2;
   echo $text;
   // 1行目 
   // 2行目
?>

比較演算子

比較演算子では、2つの値を比較し、その結果を論理値(trueまたはfalse)で返します。

ある条件式が正しい場合のことを「満たす」と言い、正しくない場合を「満たさない」と言います。満たす場合の論理値を true(日本語で「真」)、満たさない場合の論理値を false(日本語で「偽」)と言います。

1 < 2
// true

5 <= 4
// false

注意

値が等しいときは「==」です。
=だけでは代入演算子になります。

課題1

PHPファイルの中に「kadai」フォルダを作成し、その中に「kadai_1.php」ファイルを作成してください。

課題内容

画面に「私の名前は○○で、△△歳です。」と出力させてみよう。

条件

  1. 変数は2つ以上用いてください。
  2. ○○には自分の名前、△△には自分の年齢を入れてください。

08条件分岐

ここからは条件分岐について学んでいきます。JavaScriptとほぼ同じなのであまり難しく考えず進めていきましょう。

if文

記述方法はJavaScriptとほぼ同じです。if()の()内がtrueの時は1つ目の{}内が実行されます。

<?php
    // 10 > 5 は正しいので、true と評価される。 if (true) となるので { } の中が実行される
    if (10 > 5) {
        echo 'ここだけ表示される' . PHP_EOL;
    }

    // 10 <= 5 は間違いなので、 false と評価される。if (false) となるので { } の中は実行されない
    if (10 <= 5) {
        echo 'ここには絶対来ない' . PHP_EOL;
    }
?>

if-else文

また、else文を書くことで、if文の条件式が falseの場合に実行させる処理を記述できます。

if文が実行されるとelse文は実行されず、if文が実行されないとelse文が実行されるようになります。elseは「その他」を意味する英単語です。

<?php
    if (10 == 5) {
        echo '10 == 5 は false なのでここは実行されない' . PHP_EOL;
    } else {
        echo 'if側が実行されないので、ここだけ実行される' . PHP_EOL;
    }
?>

上記の例だとelseの後の{}が実行されます。

if-elseif-else文

if-else文では条件分岐を2つまでしか分けることができませんでした。

しかし、実際には2の倍数の時、3の倍数の時、5の倍数の時など3つ以上に条件を分けたいときが多く存在します。

そこで用いられるのはif-elseif-else文です。

$number = mt_rand() % 10;

    if ($number % 2 === 0) {
        echo $number . 'は2の倍数です' . PHP_EOL;
    } elseif ($number % 3 === 0) {
        echo $number . 'は3の倍数です' . PHP_EOL;
    } elseif ($number % 5 === 0) {
        echo $number . 'は5の倍数です' . PHP_EOL;
    } else {
        echo $number . 'は0か1か7か9です' . PHP_EOL;
    }

mt_rand()は0から2147483647までの中からランダムに数字を生成します。

これを10で割ったときの余りを見ると、0から9までのランダムな数字が得られます。

PHPでは elseif()を用いて条件分岐を追加することができます。JavaScriptでは else if()でしたので、わずかに記述方法が異なります。

switch文

switch文は複数の場合に対して異なる処理を実行するための構文です。

if 文と同じく条件分岐を行いますが、特に条件が多い場合や値によって処理が分岐する場合に、switch文が見やすいと感じられることがあります。

実務でも、条件分岐が多くなる場面で switch文が使われることがあります。

switch文は、次のような場合によく使われます。

  • 複数の場合に対して異なる処理を実行する場合
  • 条件分岐が複雑な場合に、コードをスッキリさせるために使用する場合

switch文の構文は次のようになります。

switch (条件式) {
    case 値1:
        // 値1の場合に実行する処理
        break;
    case 値2:
        // 値2の場合に実行する処理
        break;
    ...
    default:
        // 上記の値以外の場合に実行する処理
        break;
}

switch 文は以下の3つの部分から構成されています。

  1. 条件式:switch文の各 case の処理を実行するかどうかを判定する条件式を指定します。
  2. case: 条件式と一致する値を指定します。caseの値に一致した場合に、そのcase以降に書かれた処理が実行されます
  3. default:caseの値に一致しなかった場合に実行される処理を指定します。defalutは省略することができます

switch文の例は以下のようです。

$num = 5;

switch ($num % 2) {
    case 0:
        echo $num."は偶数です。";
        break;
    case 1:
        echo $num."は奇数です。";
        break;
}

// 5は奇数です。

まずはswitchの()内が実行されます。

今回は$num % 2なので結果は1になります。(%はあまりを取得します。今回は5÷2のあまりなので1)

よって今回のcase文に一致するのはcase 1:の部分なのでecho $num."は奇数です。";が実行されます。

09繰り返し

ここからは繰り返し処理について触れていきます。

JavaScript同様にPHPにも様々な繰り返し処理が存在します。

実務内でもよく使われる繰り返し処理も存在するので押さえておきましょう。

for文

for文は、次のような場合によく使われます。

  • 特定の回数だけ処理を繰り返す場合
  • 特定の配列やオブジェクトの各要素に対して処理を行う場合

こちらで指定した回数分だけ処理を行うことができます。

実務ではあまり用いられることは少ないですが大切な処理なので理解して使えるようにしましょう。

使い方

for (初期化式; 条件式; 増減式) {
    // 実行する処理
}
  1. 初期化式: for文が実行される前に1回だけ実行される処理を指定します。ここでは、繰り返し処理を行うための変数を初期化することがよくあります。
  2. 条件式: for文を実行するかどうかを判断するための条件式を指定します。条件式がtrueの間は、for文の処理が繰り返し実行されます。
  3. 増減式: for文の処理が実行されるたびに、1回だけ実行される処理を指定します。ここでは、繰り返し処理を行うための変数の値を増減させることがよくあります。

以下は、for文を使用して1から10までの整数を表示する例です。

for ($i = 1; $i <= 10; $i++) {
    echo $i;
}
// 1 2 3 4 5 6 7 8 9 10

while文

PHPのwhile文は、特定の条件がtrueの間、繰り返し実行される処理を記述するための構文です。

while文は、次のような場合によく使われます。

  • 特定の条件がtrueの間、処理を繰り返す場合
  • 特定の処理が特定の条件を満たすまで繰り返される場合

while文の構文は次のようになります。

while (条件式) {
    // 実行する処理
}

while文は以下の2つの部分から構成されています。

  1. 条件式: while文を実行するかどうかを判定するための条件式を指定します。条件式がtrueの間は、while文の処理が繰り返し実行されます。
  2. 処理: while文が実行されるたびに実行される処理を指定します。

以下は、while文を使って1から10までの整数を順に表示する例です。

$i = 1;
while ($i <= 10) {
    echo $i;
    $i++;
}

上記の例では、while文の条件式として、変数$iが10以下かどうかを判定しています。

また、while文の処理の中では、$iの値を1増やしています。

これにより、while文が繰り返し実行されるたびに$iの値が1ずつ増加し、最終的には$iが10を超えるためwhile文の実行が終了します。

do-while文

PHPのdo-while文は、while文と同様に、特定の条件がtrueの間、繰り返し実行される処理を記述するための構文です。

do-while文は、次のような場合によく使われます。

  • while文と同様に、特定の条件がtrueの間、処理を繰り返す場合
  • 特定の処理が特定の条件を満たすまで繰り返される場合

do-while文の構文は次のようになります。

do {
    // 実行する処理
} while (条件式);

do-while文は以下の2つの部分から構成されています。

  1. 処理: do-while文が実行されるたびに実行される処理を指定します。
  2. 条件式: do-while文を実行するかどうかを判定するための条件式を指定します。条件式がtrueの間は、do-while文の処理が繰り返し実行されます。

do-whileとwhileの違いは?

  • while文は、条件式がfalseの場合は処理を実行しません。また、条件式がtrueの場合は、処理を実行した後に条件式を再度判定し、条件式がtrueの場合は処理を繰り返し実行します。
  • do-while文は、処理を1回は必ず実行します。また、処理が実行された後に条件式を判定し、条件式がtrueの場合は処理を繰り返し実行します。


つまり、while文は条件式が falseの場合は実行されず、do-whileの場合は条件式が falseであっても最低1度は必ず実行されるという違いがあります。

以下は、do-while文とwhile文で同じ処理を記述した例です。

$i = 1;
while ($i <= 10) {
    echo $i;
    $i++;
}

$i = 1;
do {
    echo $i;
    $i++;
} while ($i <= 10);

// どちらも12345678910と表示される。

foreach文

PHPのforeach文は、配列や連想配列の要素を順番に取り出しながら、繰り返し処理を実行するための構文です。

foreach (配列 as 変数) {
    // 実行する処理
}

foreach文は以下の2つの部分から構成されています。

  1. 配列: foreach文で処理を行う配列または連想配列を指定します。
  2. 変数: 配列から取り出した値を格納するための変数を指定します。連想配列の場合は、キーと値の両方を格納することができます。

foreachの例

$fruits = ["apple", "banana", "orange"];
foreach ($fruits as $fruit) {
    echo $fruit;
}
// apple banana orange

連想配列が与えられた時

PHPのforeach文で連想配列を処理する場合は、次のように書くことができます。

foreach (連想配列 as キー => 値) {
    // 実行する処理
}

実際の処理を見てみましょう。

$fruits = ["apple" => "りんご", "banana" => "バナナ", "orange" => "オレンジ"];
foreach ($fruits as $key => $value) {
    echo $key . ": " . $value . "\n";
}
// apple: りんご
// banana: バナナ
// orange: オレンジ

連想配列の場合、$keyに連想配列のキーが代入され、$valueの部分に値が入ります。

$keyは省略することもできます。

その場合は今回でいうと、”りんご”、”バナナ”、”オレンジ”のみが取得できます。

breakとcontinue

PHPのforeach文では、breakおよびcontinueを使用することができます。

この2つはループ処理を中断するための構文です。

  • break: ループ処理を完全に中断します。
  • continue: ループ処理を中断し、次のイテレーションに進みます。
$fruits = ["apple", "banana", "orange"];
foreach ($fruits as $fruit) {
    if ($fruit === "banana") {
        break;
    }
    echo $fruit;
}
// apple

$fruits = ["apple", "banana", "orange"];
foreach ($fruits as $fruit) {
    if ($fruit === "banana") {
        continue;
    }
    echo $fruit;
}
// apple orange

上記の例を解説します。

まず$fruitsの配列1つ目である”apple”$fruitに入ります。

”apple””banana”は等しくないためif文の中身は実行されません。

よって最後のecho $fruit”apple”が表示されます。

次に配列2つ目の”banana”$fruitに入ります。

if文がtrueになるのでif文の中身が実行されます。

continueは処理をやめて次のイテレーション(今回でいう”orange”)を実行するので、

echo $fruitは実行されません。

一方で、breakの場合foreach自体の処理を中断させるので”orange”は処理されません。

関数


PHPの関数はJavaScriptの関数と同じで、特定の処理をまとめて実行するためのものです。

関数を使用することで、同じような処理を複数回実行する場合に、コードを簡潔に書くことができます。

また、関数を使用することで、プログラムの保守性や再利用性を高めることができます。

関数は、次のような場合によく使われます。

  • 同じような処理を複数回実行する場合
  • 複雑な処理をまとめて管理するために使用する場合

関数の定義


関数の定義については以下のようになります。

function 関数名(引数1, 引数2, ...)
{
    // 実行する処理
    return 返り値;
}

関数は以下の3つの部分から構成されています。

  1. 関数名: 関数を呼び出すための名前を指定します。
  2. 引数: 関数の処理に必要な値を渡すためのものです。引数を省略することができます。
  3. 返り値: 関数の処理結果を返すための値です。返り値を省略することができます。

以下は、配列の中から最大値を取得する関数の例です。

function getMax($array)
{
    $max = $array[0];
    foreach($array as $array_item){
        if ($array_item > $max) {
            $max = $array_item;
        }
    }
    return $max;
}

上記は配列の中身の最大値を取り出す関数です。

配列の最大値を取得するたびにこんな処理を書いていては大変ですし、コードも長くなってしまいます。

そこで関数にすることで何度も再利用することができます。

関数の呼び出し


関数を呼び出すには、function名()という形式で記述します。

例えば、次のようなコードでは、test_functionという名前の関数を呼び出しています。

function test_function() {
    echo "Hello, World!";
}

test_function(); 
// Hello, World!

オブジェクト指向


概念

<aside> 💡 プログラムを手順ではなくシステム全体を「モノ」として見立て、人間がわかりやすい構造を保つための仕組み、考え方。

</aside>

なぜオブジェクト指向を用いるのか?

  • 効率よくプログラムを設計・開発しやすくなる
    • プログラムが小さな単位でまとまっているため他の処理でも再利用しやすくなる
  • 不具合の原因特定がしやすくなる
    • プログラムが小さな単位でまとまっているため不具合を見つけやすくなる
  • 仕様が変わっても変更しやすくなる

ここからオブジェクト指向の説明で用いられる単語について紹介していきます。

現実世界の物で例えるとイメージが付きやすいと思うので、車で例えて紹介していきます。

オブジェクト

オブジェクトはそのまま「モノ」という意味。

プログラミングにおいては、データや処理の集まりを指す。

例:

  • 車そのもの
  • 車というオブジェクトは「メーカー」、「色」というデータや「前進する」、「停止する」といった処理を含む

クラス

オブジェクトを作成するための「設計図」みたいなもの。

例:

  • 自動車を作る元となる設計図
<?php
class Car {
}
?>

インスタンス

クラスから生成した実体のこと。

例:

  • 「車」というクラスをもとに「トラック」や「パトカー」を作るとすると、「トラック」や「パトカー」のこと
<?php
$car = new Car();
?>

プロパティ

オブジェクトが持つ性質や属性のことを指す。

例:

  • 車でいうと「メーカー」、「色」、「走行距離」などの性質を指す
<?php
class Car {
    private $maker;
    private $color;
    private $mileage
}
?>

メソッド

オブジェクトが持っている振る舞いや処理を指す。

例:

  • 車でいうと「アクセルを踏むと動く」、「ブレーキを踏むと止まる」などの振る舞いを指す
<?php
class Car {
    public function stepGas() {
        // 車を動かす処理
    }
    public function stepBrakes() {
        // 車を止める処理
    }
}
?>

ここからオブジェクト指向で用いる重要な考え方について紹介します。

継承

同じようなプログラムをまとめ、コードを再利用しやすくする仕組み。

似たようなオブジェクトを複数作成する場合に継承を使うことで同じ機能の実装をすることができる。

<?php
// 車の基本的な機能を持ったベースとなるクラス
class BaseCar {
    public function stepGas() {
        // 車を動かす処理
    }
    public function stepBrakes() {
        // 車を止める処理
    }
}

// 基本機能を持った車クラスを継承して、パトカークラスを作る
class PoliceCar extends BaseCar{
    public function soundSiren() {
        // サイレンを鳴らす処理
    }
}

$policeCar = new PoliceCar(); // インスタンスを生成
$policeCar->soundSiren(); // サイレンを鳴らす処理

// 継承した親クラスのメソッドを呼ぶことも可能
$policeCar->stepGas(); // 車を動かす処理
$policeCar->stepBrakes(); // 車を止める処理
?>

ポリモーフィズム

同じメソッドを呼び出してもオブジェクトが変われば振る舞いが変わること。

<?php
// 車の基本的な機能を持ったベースとなるクラス
class BaseCar {
    public function soundHorn() {
        // 「ブー」というクラクションを鳴らす処理
    }
}

// HogeCarもFugaCarも同じBaseCarを継承していて、
// BaseCarにあるメソッドと同様のメソッドを持っている
class HogeCar extends BaseCar{
    public function soundHorn() {
        // 「ボー」というクラクションを鳴らす処理
    }
}
class FugaCar extends BaseCar{
    public function soundHorn() {
        // 「ピッ」というクラクションを鳴らす処理
    }
}

$hogeCar = new HogeCar(); // インスタンスを生成
$fugaCar = new FugaCar(); // インスタンスを生成

// メソッドを呼び出す
$hogeCar->soundHorn() // 「ボー」というクラクションを鳴る
$fugaCar->soundHorn() // 「ピッ」というクラクションを鳴る
?>

カプセル化

簡潔に説明すると、外部から操作できる範囲を限定すること。

<aside> 💡 車で例えると、運転手はアクセルを踏むことで車が進み、ブレーキを踏むことで車が止まることさえ知っていれば運転することができる。 だが、運転手はアクセルを踏んだ際の車内部の処理までは把握していない。 内部構造まで把握しなくても利用者は使用することができる。

</aside>

プログラム実装者も必要な機能のみ利用できれば、詳細に内部構造を理解しなくて済むため、効率よく開発していくことができる。

他のメリットとして、適切にアクセス範囲を設けることで予期せぬ不具合などを防ぐことができる点もある。

<?php
class Car {
    private $maker; // 外からアクセスできない
    public $color;  // 外からアクセスできる

    // 外からアクセスできない
    private function hoge() {
    }

    // 外からアクセスできる
    public function fuga() {
    }
}
?>

課題


Lesson5_PHPフォルダ内の「kadai」フォルダ内に新しく「kadai_2.php」を作成してください。

作成した「kadai_2.php」に以下の課題のコードを記述してください。

① 配列の中から「name」のみを取り出してください。

$array = [
    [
        'id' => 1,
        'code' => '001',
        'name' => '佐藤',
    ],
    [
        'id' => 2,
        'code' => '002',
        'name' => '佐々木',
    ],
    [
        'id' => 3,
        'code' => '003',
        'name' => '山本',
    ],
];

目標

array (size=3)
  0 => '佐藤', 
  1 => '佐々木',
  2 => '山本'

Lesson5_PHPフォルダ内の「kadai」フォルダ内に新しく「kadai_3.php」を作成してください。

作成した「kadai_3.php」に以下の課題のコードを記述してください。

② 配列 $array は自然数または null を含む配列です。この配列から null を取り除いてください。

$array = [1, 2, null, 4, null, 6, 7];

目標

$array = [1, 2, 4, 6, 7];

投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です