未経験からエンジニア転職をするための最強ロードマップロードマップ

【PHP教材⑤】クラスやインスタンスの使い方からフォームからデータを受け取る方法、メールの送信処理までを徹底解説

ファド

こんにちは!
PHPのLaravelやJavaScriptでWeb開発をしているフリラーンスエンジニアのファドと申します!

こちらの記事はPHP教材の第5回目の記事になります。

その他のPHP教材を学習したい方は下記リンクから直接教材へ飛ぶことができます。

目次

クラスとインスタンスについて

フォルダ名:「class」

クラスとは変数(プロパティ)関数(メソッド)を、1枚の設計図にしたものです。変数(プロパティ)のことをメンバ変数関数(メソッド)のことをメンバメソッドと呼んだりもします。しかしここでは話を単純にするために変数、関数と呼んでいきます。そんな用語もあったなぐらいで大丈夫です。

簡単にいうと、クラスという設計図の中に変数(プロパティ)を設定し、そのクラスの中で何を行うかを関数(メソッド)で設定します。

一方インスタンスとは、クラスで書いた設計図を元に実体化させることです。イメージはお家の設計図を書いた後に、設計図を元にお家を建てていくといったイメージです。
1つのクラスで、複数のインスタンスを作成することができます。設計図があれば、幾つでもお家を建てられますからね。それと同じです。

クラス書き方

クラスは以下のように書きます。

<?php

// クラス
class クラス名
{
    public $変数名;
    public $変数名;

    public function 関数名()
    {
        // 実行内容
    }
}

1. クラスなのではじめにclassでスタートさせます。

2. 次にクラス名を書きます。このクラス名の先頭は一般的に大文字で書きます。(小文字でも反映はされます)

3. 次に{ }の中に変数名を書いていきます。ここで出てくるpublicは次の記事で解説します。

4. 変数名が書けたら、次に関数を定義します。ここでもpublicのあとにfunction 関数名()を書いていきます。

5. そして最後に{ }の中に実行したい内容を書いていきます。

関数の実行内容を書く際に、クラスの中の変数や関数にアクセスするときは、$this というものを使います。書き方はecho $this->変数名などと書いていきますので、こちらも覚えておきましょう!

これでクラスの書き方は以上です。

インスタンス書き方

インスタンスは以下のように書きます。

<?php
// インスタンス
$インスタンス名 = new クラス名();
$インスタンス名->変数名 = 値;
$インスタンス名->関数名();

1. インスタンス名 = new クラス名();で必ずスタートします。

2. インスタンス名->変数名 = 値;で、クラスで指定した変数名の値を定義します。ここで書く変数名に$は付かないので注意です。
また、->アロー演算子と言われるもので変数へのアクセス・関数の呼び出しを実行するという意味を持ちます。

3. 関数を呼び出すためにここでも$インスタンス名->関数名();と書いていきます。

使い方

では実際に使い方について見ていきましょう。
index.phpを作成し、下記の通り編集してください。

<?php

// クラス
class Item
{
    public $name;
    public $price;

    public function much()
    {
        echo $this->name . "は" . $this->price . "円です";
    }
}

// インスタンス
$chair = new Item();
$chair->name = "いす";
$chair->price = 5000;
$chair->much();

まずクラスの中に商品の名前を表す$nameと金額を表す$priceを書きます。
その後にmuchという関数を定義し、実行内容に$nameは$priceです。と定義しました。
次にインスタンスで、 $nameをいす、$priceを5000、そして関数muchを呼び出すためのインスタンスを作成します。

では、index.phpをブラウザで確認してください

いすは5000円ですと出力されていればOKです!

クラスの継承

継承とは、新しいクラスを作成する際に、今あるクラスの変数や関数の内容も使えるようにすることです。
また、新たに変数や関数を定義することもできます。

では実際に書き方について見ていきましょう。
書き方は下のように書いていきます。

<?php
class 新しいクラス名 extends 継承したいクラス名
{
    public $変数名;
    public $変数名;

    public function 関数名()
    {
        // 実行内容
    }
}

クラスの書き方とほぼ同じですが、はじめのclass 新しいクラス名 extends 継承したいクラス名{}の部分が違っているので、注意しましょう。

では実際に、継承の使い方について見ていきます。

今回は、先ほどのItemクラスの他に、新しくItem2というクラスを作成し、消費税の情報を追加していきます。
index.phpを下記の通り編集してください。

<?php
// クラス
class Item
{
    public $name;
    public $price;

    public function much()
    {
        echo $this->name . "は" . $this->price . "円です" . "<br>";
    }
}

//新しいクラス
class Item2 extends Item
{
    public function tax()
    {
        echo "税込価格" . $this->price * 1.10 . "円です";
    }
}


// インスタンス
$chair = new Item();
$chair2 = new Item2(); //新しく定義
$chair->name = "いす";
$chair->price = 5000;
$chair2->price = 5000; //新しく定義
$chair->much();
$chair2->tax(); //新しく関数を呼び出す

書き方はクラスと変わりません。
インスタンスを新しく作成するので、$chair2 = new Item2();を忘れずに書きましょう!
index.phpをブラウザで確認してください。

画像のように表示されていればOKです!

アクセス修飾子について

アクセス修飾子とは、変数(プロパティ)関数(メソッド)にどこからアクセスできるかを指定するものです。指定にはpublic``private``protectedの3つのどれかを指定します。

種類説明
public継承可能 アクセス修飾子の定義が無い場合にはpublic扱い
private継承不可能
protected継承可能 privateとpublicの中間的存在であり、継承したクラスからは参照できる非公開な要素

上記の通り、アクセス修飾子がprivateであると継承が適用されません。

そのため、privateが含まれているクラスを継承する場合、全く同じクラスを基礎として新しいクラスが作成されるわけではありません。

継承できるものだけを利用したクラスが作成されます。

初心者のうちは、privateにしていることを忘れてしまい、継承ができないと戸惑ってしまうこともあると思いますので特に注意しておきましょう。

実際に動きを確認してみましょう!
index.phpを下記の通り編集してください。

<?php
class Super
{
    protected function protectedFunc()
    {
        echo "Protected\n";
    }
    private function privateFunc()
    {
        echo "Private\n";
    }
}
$super = new Super;
$super->protectedFunc();   // エラーになります
$super->privateFunc();     // エラーになります

こちらは、privateprotectedのメソッドにアクセスしようとしているのでエラーとなります。

次にSuperクラスを継承したSubクラスからメソッドにアクセスしてみます。

index.phpを下記の通り編集してください。

<?php
class Super
{
    protected function protectedFunc()
    {
        echo "Protected\n";
    }
    private function privateFunc()
    {
        echo "Private\n";
    }
}
class Sub extends Super
{
    public function publicFunc()
    {
        parent::protectedFunc();
    }
}

$sub = new Sub();
$sub->publicFunc();

ブラウザにProtectedが表示されていればOKです!

どのアクセス修飾子を使うべきか

アクセス修飾子を指定せず、すべてをpublicにしてもプログラムの動作に支障はありません。

ですが、プログラムの安全性を高めるためには、privateにできるものはprivateにしたほうが良いでしょう。特にプロパティは、外部から変更されると困るというケースが多いです。

そのため、プロパティはprivateにして、プロパティを取得するメソッドと変更するメソッド(いわゆるgettersetter)を作成し、そのメソッドでプロパティのバリデーションをするなどの手法が取られることが多いです。

formでデータを受け取る

HTMLのform要素を使ってデータを受け取ることができます。

PHPにおけるデータの受け取り方には、GET と POST を使う2通りの方法があり、それぞれ次のような特徴、メリットがあります。

GET:データがURLで引き渡される(画面に出て分かる)
POST:データがURLで引き渡されない。また、大量に送るのに適している。

URLにデータを含めてもいい内容かどうかで、双方を使い分けましょう。

また、画面に表示されないことから、秘匿にしたいデータを送る際はPOSTにして送ることで、
見られるリスクが軽減されます。
ただ、デベロッパーツールを使えば見えてしますので、セキュリティ対策は別途で必要になります。

ですが今回はまず使い方を覚えていきましょう。

以下の手順でいきます。
①送信する側(index.php)と受け取る側(receive.php)のファイルを用意。
②送信する側にHTMLでフォームを作る。
③form の action属性に データの行き先(受け取るファイルのパス)を指定。
④form の method属性に 送信の際の転送方法(HTTPメソッド)を指定。
⑤input の name属性に 任意の値 を指定する。
⑥受け取る側で 任意の値 を受け取る処理を書く。
⑦送信する側で値を入力し送信する。

事項から手順を踏んでGET、POSTそれぞれやってみましょう!

GETでデータを受け取る

フォルダ名:「get」

それではやっていきましょう。

①送信する側(index.php)と受け取る側(receive.php)のファイルを用意。
index.phpとreceive.phpを作成します。

②送信する側にHTMLでフォームを作る。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="" method="">
        <br>
        姓:<input type="text">
        <br>
        名:<input type="text">
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

index.phpをブラウザで確認してください。

③form の action属性に データの行き先(受け取るファイルのパス)を指定。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="./receive.php" method=""> <!-- ここを編集 -->
        <br>
        姓:<input type="text">
        <br>
        名:<input type="text">
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

④form の method属性に 送信の際の転送方法(HTTPメソッド)を指定。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="./receive.php" method="GET"> <!-- ここを編集 -->
        <br>
        姓:<input type="text">
        <br>
        名:<input type="text">
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

⑤input の name属性にそれぞれ任意の値を指定する。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="./receive.php" method="GET">
        <br>
        姓:<input type="text" name="family_name"> <!-- ここを編集 -->
        <br>
        名:<input type="text" name="first_name"> <!-- ここを編集 -->
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

これで送信側は準備OKです。

⑥受け取る側で 任意の値 を受け取る処理を書く。

今回はGETで受け取りたいので
$_GET[ ]を使います。

使い方は以下のとおりです
$_GET[“受け取りたいフォームのname属性”];

なので今回は
$_GET[“family_name”];
$_GET[“first_name”];
となります。

receive.phpを以下のように編集してください。

<?php
var_dump($_GET["family_name"]);
var_dump($_GET["first_name"]);

⑦送信する側で値を入力し送信する。
ソースも編集したので
更新も兼ねて再度、
http://localhost:8888/get/
にアクセスしフォームに値を入力しましょう。

そして、送信ボタンで送信するとform要素のaction属性で指定したファイルに飛びます。

以下のようになれば、成功です!

上記の画像のURLに注目してください

localhost:8888/get/receive.phpの後に?family_name=山田&first_name=太郎と記述されていると思います。
?から始まって & でそれぞれのデータが区切られています。
分解すると

family_name=山田
&
first_name=太郎

となっています!

POSTでデータを受け取る

フォルダ名:「post」

それではやっていきましょう。

①送信する側(index.php)と受け取る側(receive.php)のファイルを用意。
index.phpとreceive.phpを作成します。

②送信する側にHTMLでフォームを作る。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="" method="">
        <br>
        姓:<input type="text">
        <br>
        名:<input type="text">
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

index.phpをブラウザで確認してください。

③form の action属性に データの行き先(受け取るファイルのパス)を指定。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="./receive.php" method=""> <!-- ここを編集 -->
        <br>
        姓:<input type="text">
        <br>
        名:<input type="text">
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

④form の method属性に 送信の際の転送方法(HTTPメソッド)を指定。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="./receive.php" method="POST"> <!-- ここを編集 -->
        <br>
        姓:<input type="text">
        <br>
        名:<input type="text">
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

⑤input の name属性にそれぞれ任意の値を指定する。

index.phpを以下のように編集してください。

<!DOCTYPE html>
<html>

<head>
    <title>HTMLのformからデータを受けとる</title>
    <meta charset="UTF-8">
</head>

<body>
    <form action="./receive.php" method="POST">
        <br>
        姓:<input type="text" name="family_name"> <!-- ここを編集 -->
        <br>
        名:<input type="text" name="first_name"> <!-- ここを編集 -->
        <br>
        <input type="submit" value="送信">
        <br>
    </form>
</body>

</html>

これで送信側は準備OKです。

⑥受け取る側で 任意の値 を受け取る処理を書く。

今回はPOSTで受け取りたいので
$_POST[ ]を使います。

使い方は以下のとおりです
$_POST[“受け取りたいフォームのname属性”];

なので今回は
$_POST[“family_name”];
$_POST[“first_name”];
となります。

receive.phpを以下のように編集してください。

<?php
    var_dump($_POST["family_name"]);
    var_dump($_POST["first_name"]);

⑦送信する側で値を入力し送信する。

ソースも編集したので、ページを更新してから再度送信ボタンで送信するとform要素のaction属性で指定したファイルに飛びます。

以下のようになれば、成功です!

POSTの場合はURLに表示されません。
このように、URLを誰かとシェアしたりしたい場合は、GETを使用し
ログイン時など、パスワード等のURLに表示されて困る情報を扱う場合には、POSTを使用しましょう!

メール送信処理

PHPでメール送信を行うことができます。

mb_send_mail関数を使いますが、初期設定等が必要なので以下ソースと
参考サイトを見てみてください。

<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");

$email = "xxxxxx@example.com"; //送信元
$subject = "テスト"; // 題名 
$body = "これはテストです。\n"; // 本文
$to = 'xxxxxx@example.com'; // 宛先
$header = "From: $email\nReply-To: $email\n";

mb_send_mail($to, $subject, $body, $header);

参考一覧
初期設定MAMP
https://dezanari.com/mamp-mail/

初期設定XAMMP
https://qiita.com/pocha_hiyo/items/9b0b751d09c3661e4ca8

おめでとうございます!

PHPの教材を最後までお読みいただき、ありがとうございました!

次は学習した内容の確認としてPHPの課題に挑戦してみましょう!

PHP課題

さあ、これまでの学習の成果を存分に発揮させましょう!

あわせて読みたい
【PHP課題】PHPを学んだあとの腕試し問題を公開!【超有料級】 今回はPHPの課題に挑戦していただきます! まだPHPの教材を読んでいない方は、下記リンクより学習してください! https://fadotech.com/texts/ 【課題の解答について】 ...

プログラミング学習サポートについて

「独学で挫折した。。。」

「一人でのプログラミング学習がしんどい。。。」

「未経験からエンジニア転職をしたいけど何をしたら良いかわからない。。。」

このような悩みをお持ちの方向けに、本教材作成者のファドがMENTAという学習サイトにてあなたのプログラミング学習とエンジニア転職を徹底サポートいたします!

サポート価格はなんと1日あたりたったの約300円!

教材で分からない箇所のサポートはもちろんのこと、本サイトで公開しているすべての課題の解答も公開しております。
また、MENTAで学習を終わらせていただいた方限定で懇意にしていただいている企業さんを紹介することもあります!

なお、サポート内容の詳細は下記の通りです。

  • 目標設定
  • マインドセット
  • オリジナル教材見放題
  • オリジナル課題見放題
  • オリジナル課題の解答見放題
  • 課題コードレビュー
  • 教材への無制限質問
  • 課題への無制限質問
  • ポートフォリオ作成アドバイス
  • 褒めのコーチング

いくつかのプランを用意させていただいておりますので、下記より一度ご覧ください!

あわせて読みたい
【プログラミング学習】1日あたりたったの「300円」のみでプログラミングを学び、最短で転職or稼ぐ!|【ME... プログラミングを学びたいすべての方へこれからの時代は格安でプログラミングを学び、最短で稼げ自己紹介はじめまして!この度はプランをご覧いただき、誠にありがとうござ...

コメント

    この記事が気に入ったら
    フォローしてね!

    よかったらシェアしてね!
    • URLをコピーしました!

    コメント

    コメントする

    目次