こんにちは!
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(); // エラーになります
こちらは、private
とprotected
のメソッドにアクセスしようとしているのでエラーとなります。
次に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
にして、プロパティを取得するメソッドと変更するメソッド(いわゆるgetter
, setter
)を作成し、そのメソッドでプロパティのバリデーションをするなどの手法が取られることが多いです。
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課題
さあ、これまでの学習の成果を存分に発揮させましょう!
プログラミング学習サポートについて
「独学で挫折した。。。」
「一人でのプログラミング学習がしんどい。。。」
「未経験からエンジニア転職をしたいけど何をしたら良いかわからない。。。」
このような悩みをお持ちの方向けに、本教材作成者のファドがMENTAという学習サイトにてあなたのプログラミング学習とエンジニア転職を徹底サポートいたします!
サポート価格はなんと1日あたりたったの約300円!
教材で分からない箇所のサポートはもちろんのこと、本サイトで公開しているすべての課題の解答も公開しております。
また、MENTAで学習を終わらせていただいた方限定で懇意にしていただいている企業さんを紹介することもあります!
なお、サポート内容の詳細は下記の通りです。
- 目標設定
- マインドセット
- オリジナル教材見放題
- オリジナル課題見放題
- オリジナル課題の解答見放題
- 課題コードレビュー
- 教材への無制限質問
- 課題への無制限質問
- ポートフォリオ作成アドバイス
- 褒めのコーチング
いくつかのプランを用意させていただいておりますので、下記より一度ご覧ください!
コメント