LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

PHP教材

Last updated at Posted at 2022-03-20

PHPとは

PHPとは動的にWebページを生成することができるサーバーサイドのスクリプト言語です。
MySQLなどのデータベースとの連携が容易なことなどから、WordPressを含めたWebアプリケーションの開発にもよく使われる有名なスクリプト言語でもあります。

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

例えば、Twitterを思い浮かべてみてください。
ツイッターを開いたときに、表示されるツイート内容などは毎回変わりますよね。
これが動的なWebページの例です。
PHPを使うことによって、動的にHTMLを生成して表示することが可能になるのです。

PHPの主な特徴として、HTMLで記述したファイルの中に埋め込んで使えることが挙げられます。
やり方は、HTMLで記述された内容の途中に、PHPのプログラムを記述するだけです。

実際に書き方を見てみましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1><?php echo "PHPで見出しを表示"; ?></h1>
  <p><?php echo "PHPで本文を表示"; ?></p>
</body>
</html>

<?PHP ?>の中に囲まれている部分がPHPのコードとなります。

このように、PHP・HTMLを別々のファイルとして扱うのでなく、1つのファイルにまとめられるので分かりやすいのもPHPの特徴です。

また、PHPと共にWebページ生成の際によく使われるプログラミング言語が、みなさんもよくご存知のJavaScriptです。
PHPがサーバーサイドの言語であるのに対し、JavaScriptはクライアントサイドの言語と言われます。

簡単に言い換えると、PHPの処理はサーバー側で行われるのに対して、JavaScriptの処理はWebページを参照するユーザー(クライアント)側のブラウザで行われると言えます。

環境構築

今まで学習してきたHTMLやCSS、JavaScriptとは違い、PHPではPC内に動作環境を用意してあげなければなりません。
そこで、PHPの動作環境を構築するために「MAMP」や「XAMPP」をインストールし、PHPの動作環境を用意していきましょう!

Macの方は下記URLより「MAMP」をインストールしましょう。

Windowsの方は下記URLより「XAMPP」をインストールしましょう。

MAMP・XAMPPとは

はじめてのPHP

フォルダ名:「php_test」

インストールが無事に完了したら、早速PHPをブラウザで表示してみましょう!

まずは以下の手順でphp_testフォルダを作成してください。

①MAMP(もしくはXAMPP)のフォルダの中から
 「htdocs」という名前のフォルダを開く
php_1.png

② htdocsフォルダの中に「php_test」というフォルダを新たに作成する
php_2.png

③ php_testフォルダの中に「index.php」という名前のファイルを作成する
php_3.png

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

index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p><?php echo "初めてのPHP"; ?></p>
</body>
</html>

ファイル、フォルダの作成が完了したら、下記を参考にApache、MySQL を起動してください。

MAMPでの起動方法
①MAMPを開く
②Start Serverボタン押す

MAMP起動 参考サイト

XAMPPでの起動方法
①XAMPPのコントロールパネルを開く
②Apache、MySQLの横のSTARTボタンをそれぞれ押す

XAMPP起動 参考サイト

これでブラウザへの表示の準備が完了しました!

早速下記のURLをクリックし、ブラウザで確認してみましょう!

http://localhost:8888/php_test/ 」または「 http://localhost/php_test/

基本設定では、MAMPの方が「 http://localhost:8888/php_test/
XAMPPの方が「 http://localhost/php_test/ 」となります。

※どちらにもアクセスしてみて、下記画像のような画面が表示されるURLを今後は使用してください。

php_4.png

このように表示されれば、OKです!

※うまくいかなかったときは、以下を確認してください。

  • Apache、MySQLは正常に起動しているか
  • フォルダ名、ファイル名は間違っていないか
  • コードは間違っていないか(例:半角文字、半角スペースのはずが全角になっている等)
  • :8888が付いているURLと付いていないURLの2パターンを試したか

★検索ワード
・MAMP localhost 表示されない
・XAMPP localhost 表示されない

PHPの書き方

ここからはPHPの書き方の説明をしていきます。
まずHTMLと違ってPHPは書いたコードが必ず画面に出てくるわけではありません。
そこで、まず文字や数字を画面に出力するための方法から学んでいきましょう!

<?php ?>

PHPは<?php(開始タグ)ではじまり、?>(終了タグ)で閉じます。
開始タグと終了タグの中にPHPのコード(プログラムや命令文)を書きます。

では、先程のコードを例に説明していきます!

php_test/index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p><?php echo "初めてのPHP"; ?></p>
</body>
</html>

pタグに囲まれている部分に注目してください!
<?php echo "初めてのPHP"; ?>と記述されているのがわかりますね!
開始タグと終了タグの中には

echo "初めてのPHP";

と書かれています。
ここで初めてechoというものが出てきました。
こちらは、文字を出力するための言語構造です。
この例では「初めてのPHP」という文字列を画面に出力する役割を担っています。

そして、PHPではJavaScript同様に処理の行末にセミコロンをつけます。
「ここからここまでが、一つの命令文ですよ!」という区切りを判定するためです。

index.phpについて

先ほどphp_testフォルダの中にindex.phpを作成し、
URLでhttp://localhost:8888/php_test/ またはhttp://localhost/php_test/
を入力したときindex.phpの中に書いてある

index.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p><?php echo "初めてのPHP"; ?></p>
</body>
</html>

を読み込んで、ブラウザ上に「初めてのPHP」を出力しました。

では、php_testフォルダの中に新たにtest.phpを作成しましょう。
作成したtest.phpを下記の通り編集してください。

test.php
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p><?php echo "これはテストです"; ?></p>
</body>
</html>

作成が完了しましたら、ブラウザで確認していきましょう!

URL: http://localhost:8888/php_test/test.php/
または http://localhost/php_test/test.php/
php_5.png

ブラウザでこのように表示されましたね。

では次に、こちらからブラウザで確認してください。
http://localhost:8888/php_test/index.php
または http://localhost/php_test/index.php
と入力して開いてください。

php_6.png

このように出力されましたね。

では最後に
http://localhost:8888/php_test/
または http://localhost/php_test/
ともう一度入力してブラウザで開いてください。

php_7.png

こちら、どういうことかというと

http://localhost:8888/php_test/ (http://localhost/php_test/) で
MAMP(もしくはXAMPP)内のhtdocsフォルダの中の php_test というフォルダを参照しています。

フォルダを参照した時にindexという名前はデフォルトドキュメントという意味を持ち、省略してもブラウザで表示されます。

そのためフォルダ名を指定しない場合は自動的にindex.phpが参照されます。

つまり
http://localhost:8888/php_test/
(http://localhost/php_test/)

http://localhost:8888/php_test/index.php
(http://localhost/php_test/index.php)
も同じファイルを参照しているということです!

コメントアウト

フォルダ名:「comment_out」

PHPのコードにも、コメントを記述することができます。
コメントとして記述した文字などは、ブラウザに表示されることはありません。
コメントであれば見た目に影響なく、文字や文章を書き残すことができます。
ちなみに、コメントにすることをコメントアウトと呼びます。

やり方はJavaScriptと同じです。
コメントしたい行やテキストなどを選択して、キーボードのCommand + /(Windowsの方はCtrl + /)を押してください。

コメントアウト
// これはコメント

PHPの場合、/(スラッシュ)を2記述することでコメントアウトすることができます。

また、複数行コメントアウトしたい場合は、下記のようにしてください。

コメントアウト
/*
コメント1行目
コメント2行目
コメント3行目
*/

JavaScriptのコメントアウトと同じですね!

★検索ワード
・PHP コメントアウト ショートカット

var_dump()

フォルダ名:「var_dump」
var_dump()は変数や配列の情報を表示する関数です。
値の他にその変数の型やバイト数などの詳細な情報が表示されます。
エラーが発生してしまったときや、変数や配列に期待する値が入っているのかを調査するときによく使用します。
JavaScriptのconsole.log()に似た使い方をするイメージで大丈夫です。

var_dump() 書き方

var_dump()は以下のように記述します。

var_dump(情報を出力する変数or配列)

()内には情報を表示したい変数や配列を入力します。

例えば、下記のような場合を見ていきましょう。

<?php
    var_dump('var');
?>

と記述した場合、下記の画像のように表示されます。

php_8.png

var_dump()を文字列に使用した場合string (3) "var"の3つの要素から構成された表示が出力されます。
stringがデータ型を表しています。
データ型については、JavaScriptとほとんど同じですが、後ほど詳しく説明していきます。
(3)は対象の値、今回の例では"var"のバイト数を表示しています。
半角英数の場合は1文字のバイト数が1であるため、例では(3)と表示されています。
最後に"var"の部分ですが、こちらはvar_dumpの()内に入れた文字が表示されています。

var_dump() 機能の確認

それでは実際に使ってみて、機能を確認していきましょう!

MAMP(XAMPP)のhtdocsフォルダ内に’var_dump’という名前のフォルダを作成し、その中にindex.phpというファイルを作成してください!

変数の場合

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

index.php
<?php
  $text = "test";
  var_dump($text);
?>

では、ブラウザで確認していきます!
http://localhost:8888/var_dump/
または http://localhost/var_dump/
php_9.png

変数の中身を確認する場合には上記のように使用します!
変数textの中にはtestという文字が格納されていることがわかりますね!

文字列の場合

文字列の場合
<?php
  var_dump('string');
?>

php_10.png

文字列の場合は先程例に挙げた通りです!
ブラウザで確認する場合は、ブラウザを再読み込みしてください。

数値の場合

数値の場合
<?php  
  $num = 1234
  var_dump(num);
?>

php_11.png

変数に数値を格納し、var_dump()で情報を確認すると上の画像のように表示されます!
ブラウザで確認する場合は、ブラウザを再読み込みしてください。

intの部分は文字列の場合と同じようにデータ型が表示されます。
数値の場合は文字列の場合のように、バイト数は表示されません。
また、1234の部分は文字列の場合と同じように変数の中身が表示されています。

配列の場合

配列の場合
<?php
  $array = ['string1','string2','string3'];
  var_dump($array);
  
  $array2 = [1,2,3,4];
  var_dump($array2);
  
  $array3 = [1,'string',3,4];
  var_dump($array3);
 
?>

変数に配列を格納し、var_dump()で情報を確認するとそれぞれ下の画像のように表示されます!
それぞれ一緒に見ていきましょう!

①配列に文字列のみを格納したパターン
php_12.png

②配列に数値のみを格納したパターン
php_13.png

③配列に文字列と数値を格納したパターン
php_14.png

配列の場合は、変数の場合と少し表示のされ方が違います。
データ型が表示されているところは変数のときと同じですが、配列の場合には要素数インデックス番号というものが表示されます。

まず、要素数というのは、対象の配列の中に要素(データ)が何個格納されているのかというものです。
①を例に挙げると、配列arrayの中に格納されている要素はstring1string2string3の3つの要素が入っているので要素数は3と表示されています。

続いて、インデックス番号というのは、配列はその性質上複数の要素を格納することが可能です。
そこで複数ある要素から1つを特定できるように、要素には先頭から順に番号が割り当てられています。
この番号をインデックス番号と呼んでおり「0」「1」「2」...と0から順に番号が割り当てられています。
インデックス番号を指定することで配列から要素を取り出すことも可能です。
実際の使い方は配列のレクチャーで説明していきますので、お楽しみに!

このようにvar_dump()を使用すると、変数や配列の中に格納されている要素(データ)がどのようなものだったのかを確認することが可能なので、コードの記述効率が格段にアップします。
ぜひ使い方をマスターしていってください。

★検索ワード
・PHP var_dump

変数

フォルダ名:「variable」
今回のレクチャーでは、JavaScriptでも学習しましたが、プログラミングの基本となる「変数」について改めて教えていきたいと思います。
プログラミング言語には、あるひと塊に名前をつけることができる「変数」という機能があります。

なぜこのような機能があるかと言うと、プログラミングをしていると、同じようなテキストやデータなどを何度も使い回したい場合が多々あります。
何度も使い回す場合、その都度同じテキストやデータを書き込むのは面倒ですよね。
そんなときに役立つのがこの「変数」なのです。

変数とは、さまざまなものを入れておく「箱」だとイメージするとわかりやすいです。

さて、変数がどのようなものかわかったところで、実際にPHPで変数を使う方法を説明していきます。

PHPでの変数の使い方を説明していくので、フォルダとファイルを準備しましょう!
MAMP(XAMPP)のhtdocsフォルダ内に’variable’という名前のフォルダを作成し、その中にindex.phpというファイルを作成してください。
index.phpを下記の通り編集してください。

早速コードを書いてみてみましょう!

index.php
<?php 
  $text = "PHPで変数を確認";
  echo $text;
?>

下記のURLより、ブラウザにアクセスし表示を確認してください。
PHPで変数を確認というテキストが出力されていればOKです!
http://localhost:8888/variable
http://localhost/variable

再代入

PHPの変数もJavascriptの変数と同様に再代入ができます!
以下のコードを見てください。

index.php
<?php 
  $text = "PHPで変数を確認";
  $text = "変数を上書きしました";

  // 変数を上書きしましたというテキストがブラウザに出力される
  echo $text;
?>

以上のコードのように、PHPの変数の値を再代入することができます。
つまり、再代入することで変数textの内容を書き換えることができます。
再代入した後のコードでは、新たに変数が代入されるまでは、上書きした値が変数に格納されていることになります。

変数は何回でも使える

変数は、1度定義してしまえば、何回でも再利用することができます。

再利用
  <?php 

    $word = "再利用";
    echo $word;
    echo $word;
    echo $word;
    echo $word;
    echo $word;

  ?>

こうすることで、再利用というテキストを5回出力することができます。
この「再利用できること」が、変数を使う大きなメリットの1つです。
覚えておきましょう!

変数名の命名規則

変数の名前は皆さん自身で決めていただいて構いません。
つまり、textでも、boxでも、testでもいいということです。

変数の名前は任意です。ただし以下の点に注意しましょう。
・名前には半角英数字とアンダースコア「_」のみ使用するようにしてください。
・先頭に数字を使うのは避けてください。
・先頭に大文字を使うのは避けてください。
・予約語を使わないでください。

補足ですが、PHPでは行末に;(セミコロン)を必ず入れてください。
JavaScriptの場合は付けなくても実質問題ありませんでしたが、PHPの場合は、セミコロンを省略するとプログラムが機能しなくなります。

★検索ワード
・PHP 変数
・PHP 予約語とは

データ型について

フォルダ名:「data_type」

JavaScriptにもデータ型はありましたが、もちろんPHPにもデータ型が存在します。

PHPにも、文字列、数値、真偽値といった値の型があります。
これらの値の型のことをデータ型と呼びます。

データ型を大きく分けると、スカラー型と複合型、特殊型の3つに分類されます。
・スカラー型は、一つの変数に一つの値だけを扱うことができる型のことです。
・複合型は、一つの変数に複数の値をまとめて扱えるデータ型のことです。
・特殊型は、スカラー型でも複合型でもないデータ型のことです。

PHPのデータ型を細かく見ていくと、4つのスカラー型と2つの複合型、2つの特殊型から成り立っています。

スカラー型

型名 説明
真偽値(Boolean) trueまたはfalse
整数(Int) -101などの整数
浮動小数点(Float) 3.14のような小数点数
文字列(String) "テキスト"などの文字列

複合型

型名 説明
配列(Array) 複数のデータの集合
オブジェクト(Object) データと手続きの集合

特殊型

型名 説明
リソース(Resource) 外部リソースへの参照
Null 値が存在しないことを意味する

また、以前ご紹介したvar_dump()を使うことで、データ型を簡単に調べることができます。

データ型を調べる
    var_dump(true);        
    //bool(true) 
    var_dump(124);         
    //int(124)
    var_dump(3.14);        
    //float(3.14)
    var_dump("テキスト");   
    //string(12) "テキスト"
    var_dump(['a','b']);  
    //array(2) { [0]=> string(1) "a" [1]=> int(1) } 
    var_dump(null);       
    //NULL

var_dump()の後のコメントアウトは、全て実行結果です。
配列を確認した場合には、配列に入っているすべてのデータの型が出力されます。
オブジェクト(Object)とリソース(Resource)については後ほど詳しく説明していきます!

リテラル

リテラルとは、プログラム上で数値や文字列など、データ型の値を直接記述できるように、構文として定義されたものです。
例えば、"(ダブルクォーテーション)と"で囲んだ範囲が文字列リテラルで、これは文字列型のデータを表現していることになります。

コードで説明すると、下記のようになります。

リテラルとは
// ダブルクォーテーションで囲んだ範囲が文字列リテラルになる
$str = "文字列リテラル";

下記の4つのスカラー型は、それぞれリテラル表現を持っています。
・真偽値
・整数
・浮動小数点
・文字列

また、2つの複合型も、それぞれリテラル表現が用意されています。
・オブジェクト
・配列

そして、1つの特殊型もリテラル表現が用意されています。
・null

これらのリテラルについて、まずはスカラー型から順番に見ていきます。

真偽値(Boolean)

真偽値にはtruefalseの2つのリテラルがあります。
それぞれはtrueとfalseの値を返すリテラルで、正か偽かの見た目通りの意味となります。

真偽値
var_dump(true);
// bool(true)
var_dump(false);
// bool(false)

var_dump()の後のコメントアウトは、全て実行結果です。

整数(Int)

数値は5431のような整数リテラルがあります。

数値
var_dump(1);
//int(1)
var_dump(132);
//int(132)
var_dump(4532);
//int(4532)

var_dump()の後のコメントアウトは、全て実行結果です。

浮動小数点(Float)

数値には先程ご説明した整数リテラルと、4.54326のような浮動小数点数リテラルがあります。

浮動小数点
console.log(3.14); 
// float(3.14)
console.log(1.5342); 
// float(1.5342)
console.log(5.43522); 
// float(5.43522)

var_dump()の後のコメントアウトは、全て実行結果です。

文字列(String)

文字列リテラル共通のルールとして、同じ記号(ダブルクォーテーションやシングルクォーテーションなど)で囲んだ内容を文字列として扱います。
文字列リテラルとして次の3種類のリテラルがありますが、その評価結果はすべて同じ"リテラル"になります。

文字列
var_dump("リテラル");
// string(12) "リテラル" 
var_dump('リテラル');
// string(12) "リテラル" 

var_dump()の後のコメントアウトは、全て実行結果です。

null

nullリテラルはnull値を返すリテラルです。
nullは「値がない」ということを表現する値です。

null
$hoge = null;
var_dump($hoge);
// NULL

var_dump()の後のコメントアウトは、全て実行結果です。

配列

頻繁に使われるリテラルとして配列リテラルがあります。
配列リテラルは[]で値をカンマ区切りで囲み、その値を持つArrayオブジェクトを作成します。
配列(Arrayオブジェクト)とは、複数の値に順序をつけて格納できるオブジェクトの一種です。

配列
// 空の配列を作成
$emptyArray = [];
var_dump($emptyArray);
// array(0) { }

// 値を持った配列を作成
$array = [1,2,3];
var_dump($array[0]);
// int(1)
var_dump($array[2]);
// int(3)

$arrayString = ['1番目', '2番目', '3番目'];
var_dump($arrayString[0]);
// string(7) "1番目"
var_dump($arrayString[2]);
// string(7) "3番目"

var_dump()の後のコメントアウトは、全て実行結果です。

少しややこしいですが、配列は0からはじまるインデックスに、対応した値を保持しています。
上記の配列arrayを例にすると、インデックスが0の場合は数値の1インデックスが1の場合は数値の2インデックスが2の場合は数値の3になるので、var_dump(array[0])と記述された場合は、数値の1が出力される。

このように、作成した配列の要素を取得するには、配列に対してarray[インデックス番号]という構文で指定したインデックスの値を参照できます。
また、var_dump($emptyArray);の実行結果に注目してください。
array(0) { }と出力されていますね。

このarray()の部分で配列の中に要素がいくつ入っているかということが読み取れます。
$emptyArrayは空の配列なのでarray(0)となっているということです。
$arrayを同じようにvar_dump()で出力してみましょう。

配列
// 値を持った配列を作成
$array = [1,2,3];
var_dump($array);
// array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }

var_dump()の後のコメントアウトは、全て実行結果です。

コメントアウトに注目するとarray(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(3)になっていますね。
配列$arrayの中には3つの要素が入っているということがここで読み取れます。

連想配列

配列の学習が終わったところで、ここで連想配列も一緒に学習していきましょう!
配列とは、一つの変数に複数のデータを入れておくものでした。

連想配列とは、配列を使いやすくしたものです。

配列は、先頭から順に番号を振ることで中身のデータを区別していましたが、連想配列では番号でなく名前をつけて区別することができます。

具体的に違いを説明すると、配列には、変数の箱の中身に 0,1,2……と背番号のように番号を振り、その番号を指定することでデータを指定するという性質がありましたが、連想配列では、番号のかわりに名前をつけて管理することができます。

連想配列
<?php
  $array = ["名字"=>"山田","名前"=>"太郎","年齢"=>26];
  var_dump($array);
  // array(3) { ["名字"]=> string(6) "山田" ["名前"]=> string(6) "太郎" ["年齢"]=> int(26) }
?>

var_dump()の後のコメントアウトは、実行結果です。

上のコードの名字名前のことをキー(key)山田太郎のことを値(value)といいます。

連想配列から特定の値(value)を取得する場合にはキー(key)を指定してあげます。
実際にコードで確認してみましょう!

連想配列
<?php
  $array = ["名字"=>"山田","名前"=>"太郎","年齢"=>26];
  var_dump($array["名字"]);
  //string(6) "山田"
?>

var_dump()の後のコメントアウトは、実行結果です。
山田が出力されましたね!

名字の部分を名前出席番号に変えて試してみてください。花子26がそれぞれ出力されることが確認できると思います。

演算子について

フォルダ名:「operator」
PHPにも、算術演算子や代入演算子、論理演算子などがあります。
それらをどのように使うのかなどを含めて、説明していきます。

算術演算子

種類 説明
+ 加算演算子:a + b 「aにbを足す」
- 減算演算子:a - b 「aからbを引く」
* 乗算演算子:a * b 「aとbをかける」
/ 除算演算子:a / b 「aをbで割る」
% 剰余算演算子:a % b 「aをBで割った余り」
** べき乗演算子:a ** b 「aのb乗」

手を動かしながら見ていきましょう。
index.phpを下記の通り編集してください。

index.php
<?php
  $plus = 12 + 32;
  var_dump($plus);
  //int(44)

  $minus = 29 - 12;
  var_dump($minus);
  // int(17)

  $time = 10 * 2;
  var_dump($time);
  // int(20)

  $divide = 100 / 20;
  var_dump($divide);
  // int(5)

  $extra = 33 % 5;
  var_dump($extra);
  // int(3)

  $exponent = 5 ** 5;
  var_dump($exponent);
  // int(3125)
?>

var_dump()の後のコメントアウトは、全て実行結果です。

5 ** 5は、5✕5✕5✕5✕5の計算をしています。
べき乗は忘れがちなので、ぜひ覚えておきましょう!

もちろん数字の部分を変数にすることもできます。

変数を使ったバージョン
<?php
  $num = 5;
  $ten = 10;

  $result = $num * $ten;
  var_dump($result); 
  // int(50)
?>

変数numは5、変数tenは10なので、num * ten5 ✕ 10という意味になります。
よって、出力結果はint(50)になります。

代入演算子

種類 説明
= a = b 「aにbを代入する」
+= a += b 「aにbを足して、aに代入する」
-= a -= b 「aからbを引いて、aに代入する」
*= a *= b 「aにbを掛けて、aに代入する」
/= a /= b 「aをbで割って、aに代入する」
%= a %= b 「aをbで割った余りを、aに代入する」
**= a **= b 「aのb乗をaに代入する」

手を動かしながら見ていきましょう。
index.phpを下記の通り編集してください。

index.php
  <?php
    $baseNum = 100;

    $variable = $baseNum;
    var_dump($variable);
    // int(100)
    
    $baseNum += 10;
    var_dump($baseNum);
    // int(110)
    
    $baseNum -= 30;
    var_dump($baseNum);
    // int(80)
    
    $baseNum *= 10;
    var_dump($baseNum);
    // int(800)
    
    $baseNum /= 8;
    var_dump($baseNum);
    // int(100)
    
    $baseNum %= 7;
    var_dump($baseNum);
    // int(2)
    
    $baseNum **= 4;
    var_dump($baseNum);
    // int(16)
  ?>

var_dump()の後のコメントアウトは、全て実行結果です。
自らに再代入しているので、代入演算が終わった後に変数baseNumの数値が変化するのは、とても面白いですね。
ぜひ覚えておきましょう!

もちろん文字列も足すことができます。

文字列連結
<?php
  $baseWord = '私は';
  $boysName = 'ボブ';
  $fin = 'です';

  $baseWord .= $boysName;
  var_dump($baseWord);
  // string(12) "私はボブ" 

  $baseWord .= $fin;
  var_dump($baseWord);
  // string(18) "私はボブです"
?>

文字を繋ぎ合わせることを、文字列連結と言います。
こちらも合わせて覚えておきましょう。
また、PHPで文字列連結を行う際には+=は使用できず、.=を使用することに注意しましょう!

ちなみに、普通に足すこともできます。

文字列連結
<?php
  $sentence = "これは" . "文章" . "です";
  var_dump($sentence);
  // string(21) "これは文章です"
?>

var_dump()の後のコメントアウトは、実行結果です。
こちらでも+を使用せず.で文字連結を行っています!

比較演算子

種類 説明
< a < b 「aがbより小さい」
> a > b 「aがbより大きい」
<= a <= b 「aがb以下」
>= a >= b 「aがb以上」

手を動かしながら見ていきましょう。
index.phpを下記の通り編集してください。

index.php
<?php
  var_dump(12 < 12);
  // bool(false)
  var_dump(12 > 32);
  // bool(false)
  var_dump(12 <= 12);
  // bool(true)
  var_dump(12 >= 32);
  // bool(false)
?>

var_dump()の後のコメントアウトは、全て実行結果です。
比較演算子を使用した時に返ってくる値は、真偽値(true・false)です。
算数や数学で使用していたままの使い方なので、わかりやすいですね。

等価演算子

種類 説明
== a == b 「aとbが等しい」
=== a === b 「aとbが厳密に等しい」
!= a != b 「aとbが等しくない」
!== a !== b 「aとbが厳密に等しくない」

等価演算子を使用した時に返ってくる値も比較演算子と同じく、真偽値(true・false)です。

さて、等しい厳密に等しい等しくない厳密に等しくないの違いは何でしょうか?
それは、厳密に等しい場合は、データ型も合っているかの確認をします。

言葉で説明するのもあれなので、手を動かしながら見ていきましょう。
index.phpを下記の通り編集してください。

index.php
<?php
  var_dump(12 == "12"); 
  // bool(true)
  var_dump(12 === "12"); 
  // bool(false)
  var_dump(12 != "12"); 
  // bool(false)
  var_dump(12 !== "12");
  // bool(true)
?>

var_dump()の後のコメントアウトは、全て実行結果です。
var_dump(12 == "12")のコードをよく見てください。
左辺が12で右辺が"12"となっています。
つまり、左辺は数値の12であるのに対して、右辺は文字列の12なのです。

しかし、今回の等価演算子は==なので厳密には判断しません。
つまり、双方のデータ型が同じである必要はないんです。

そのため、var_dump(12 == "12")の場合は1212の単純比較なので、trueが返ってきます。

一方で、var_dump(12 === "12")の場合は厳密に判断することになります。
そのため、数値の12と文字列の12では、データ型が違うので、falseが返ってくるようになります。

var_dump(12 != "12")var_dump(12 !== "12")も全く同じです。
var_dump(12 != "12")の場合、厳密に判断しないので、数値の12と文字列の12は等しいと判断されます。
そのため、!=である場合、等しくない場合にtrueとなるので、falseが返されます。

var_dump(12 !== "12")の場合は、厳密に判断するので、数値の12と文字列の12は等しくないと判断されます。
そのため、!==である場合、等しくない場合にtrueとなるので、trueが返されます。

★検索ワード
・PHP 演算子とは
・PHP 算術演算子
・PHP 代入演算子
・PHP 比較演算子
・PHP 等価演算子

条件分岐について(if & switch)

フォルダ名:「if_switch」

このレクチャーでは条件分岐について説明していきます。
条件分岐とは、ある条件が満たされているかどうかによって、次に実行するプログラムを変化させることです。

  • もし、変数の中身が1だった場合は、処理Aを実行する。
  • もし、変数の中身が1以外だった場合は、処理Bを実行する。

といったように、もしという言葉がキーワードになります。

if文

PHPで条件分岐を実装する場合、if文が一番良く使われています。

if文の書き方は、下記の通りです。

if文
if (条件式) {
  // trueの場合の処理を記述
}

条件式なので、最初はtruefalseが返ってくるような比較演算子や等価演算子を使った式を入れてあげるといいでしょう!
例えば、12 < 100であれば、12は100より小さいのでtrueが返ってきますね!
ということは、if文の中の処理が実行されることになります。

if文には、elseifelseというものが存在しています。

  • elseif:もし他の場合だった時など、別の条件分岐を作成することができます
  • else:if文の最後に記述し、それ以外だった場合という意味になります。
    elseifelseを使用することで、さらに複雑な条件分岐を作ることができます。

elseifelseの書き方は、下記のとおりです。

fdsa
if (条件式) {
  // trueの場合の処理を記述
} elseif (条件式) {
  // ifの条件式ではfalseだが、else ifの条件式ではtrueだった場合の処理を記述
} elseif (条件式) {
  // else ifは何個でも記述可能
} else {
  // if、elseifのどれにも当てはまらなかった時の処理を記述
}

書き方が何となくわかってきたと思うので、実際にコードで確認していきましょう!

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

index.php
<?php
  $num = 15;
  if ($num < 5) {
    echo "numは5より小さい";
  }elseif($num < 20){
    echo "numは20より小さい";
  }elseif($num < 30){
    echo "numは30より小さい";
  }else {
    echo "それ以外";
  }
?>

ブラウザで確認しましょう!
numは20より小さいが出力されていればOKです。

このコードを詳しく見てみましょう。
$num = 15では、変数numが数値の15であると定義しています。

そして、最初の条件である$num < 5ですが、15 < 5という意味なので、falseです。
そのため、ブラウザにnumは5より小さいと出力されることはありません。

次の条件である$num < 20ですが、15 < 20という意味なので、trueになります。
ということで、ブラウザにはnumは20より小さいが出力されます。

if文では、条件に当てはまるものがあった場合は、その後のコードは実行されません。
そのため、次の条件である$num < 30trueにはなりますが、ブラウザにnumは30より小さいが出力されることはありません。

したがって、var_dump(“numは20より小さい”); のみが実行されたことになります。

また、条件式に数値や変数、空文字("")、空配列([ ])を入れることもできます。
1や1.0はtrue、0と0.0はfalse、空文字("")はfalse、空配列([ ])はtrueなど、間違えやすいものも多いので気を付けましょう。

if文と論理演算子

演算子についてのレクチャーで算術演算子や代入演算子、比較演算子などを学びましたが、今回はif文と相性バツグンの論理演算子について学んでいきます。

|論理演算|説明|
|---|---|---|
|論理積(AND)|A && B 「AかつB」|
|論理和(OR)|A || B 「AまたはB」|
|否定(NOT)|!A 「Aではない」|

&&(論理積)

&&
<?php
  var_dump(12 < 100 && 50 > 12);
  // bool(true)
  var_dump(12 <= 100 && 11 >= 12); 
  // bool(false)
  var_dump(12 > 100 && 50 > 12); 
  // bool(false)
?>

var_dump()の後のコメントアウトは、全て実行結果です。
&&を挟んでいる両方の条件式がtrueであればtrueを返します。

||(論理和)

||
<?php
  var_dump(12 < 100 || 50 > 12); 
  // bool(true)
  var_dump(12 <= 100 || 11 >= 12); 
  // bool(true)
  var_dump(12 > 100 || 50 < 12); 
  // bool(false)
?>

var_dump()の後のコメントアウトは、全て実行結果です。
||を挟んでいる両方の条件式でどちらか片方でもtrueであればtrueを返します。

!(否定)

!
<?php
  var_dump(!true);
  // bool(false)
  var_dump(!false);
  // bool(true)
?>

var_dump()の後のコメントアウトは、全て実行結果です。
!が付いていた場合、truefalseを逆の意味で返します。

if文の中で論理演算子を使う

使い方の説明は終わったので、いよいよif文の中で論理演算子を使ってみましょう!

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

if文で論理演算子

<?php
  // これはtrueだよ!が出力される
  if (12 < 100 && 50 > 12) {
    echo 'これはtrueだよ!';
  }

  // これはelseifのtrueだよ!が出力される
  if (12 > 100 || 50 < 12) {
    echo 'これはtrueだよ!';
  } elseif (12 < 100 || 50 > 12) {
    echo 'これはelse ifのtrueだよ!';
  } else {
    echo 'これはelseだよ!';
  }

  // これはelseだよ!が出力される
  if (!true) {
    echo 'これはtrueだよ!';
  } else {
    echo 'これはelseだよ!';
  }
?>

各if文で条件に当てはまる文字列が1つずつ出力されています。
条件式の中身も皆さん自身で確認してみてくださいね!

switch文

if文以外にも、switch文でも条件分岐をさせることができます。

switch文の書き方は、下記の通りです。

switch文
<?php
  switch () {
    case 値1:
      // 式と値1が等しい時の処理
      break;
    case 値2:
      // 式と値2が等しい時の処理
      break;
    default:
      // それ以外の場合の処理
  }
?>

式には変数などを入れることが多いです。
その式とcaseの後に記述されている各値とが等しいかを判断し、等しかった場合は処理を実行します。
処理を実行した後は、break;と記述することで、そのswitch文を終了させます。
このbreak;を書き忘れると、次のcase処理を続けて実行してしまうので注意してください。

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

index.php
$text = '青';

switch ($text) {
  case '赤':
    echo '横断禁止';
    break;
  case '青':
    echo '横断可能';
    break;
  default:
    echo '止まれ';
}

ブラウザで確認してください。
横断可能と出力されていればOKです!

変数textは文字列のが格納されているので、case '青':と合致します。
そのため、そのcase '青':文以下での処理が実行されたため、ブラウザには横断可能が出力されます。

★検索ワード
・PHP if文 使い方
・PHP switch文 使い方
・PHP 論理演算子 使い方

繰り返し処理について

フォルダ名:「loop」

今回のレクチャーでは、繰り返し処理について学んでいきたいと思います。
繰り返し処理を簡単に説明すると、同じことを何回もプログラミングを通じて実行させることです。

例えば、「プログラミングという文字列をブラウザに100万回出力してください。」という課題があった場合、皆さんならどうしますか?

echo 'プログラミング';を100万回記述しますか?

そんなことをやるのは現実的ではないですよね?
そういう場面で役に立つのが、繰り返し処理なのです。

for文

もっとも繰り返し処理の中で一般的なのが、この「for文」です。

for文の書き方は、下記の通りです。

for文
<?php
  for (初期値; 条件式; 増減式) {
    繰り返し処理
  }
?>

難しい言葉がたくさん並んでいるので、コードを使って確認していきましょう。

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

index.php
<?php
  for ($i = 0; $i < 10; $i++) {
    echo $i;
  }
?>

ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
php_15.png

上に書いてある「for文の書き方のコード」と見比べながらコードの中身を詳しく見ていきましょう!

初期値には$i = 0;が記述されています。
ここでは、iという変数を定義して、0を代入しています。

条件式には$i < 10;が記述されています。
$i < 10trueの場合は、処理を繰り返すことを意味しています。

増減式には$i++が記述されています。
こちらのコードでは、処理を繰り返すたびに変数iに1を足していくことを意味しています。
この$i++は、1ずつ足していくということであり、インクリメントと呼ばれます。
一方、$i–-は、1ずつ減らしていくということであり、デクリメントと呼ばれています。

つまり、1回目にfor文が回る時は、変数iが0なので、$i < 10trueとなり、ブラウザに数値の0が出力されます。
次に、for文が回る時に、変数iがインクリメントされるので、変数iは数値の1になります。
数値の1ということは、$i < 10trueとなるので、ブラウザに数値の1が出力されます。
これを繰り返していき、最終的に$i < 10falseとなる時に、ブラウザに値が出力されなくなります。
$i < 10の場合、変数iが10になるとfalseになります。
なので、ブラウザのを見ると、数値の9までが出力されています。

どうでしょうか?少し理解できましたか?
JavaScriptと書き方はほとんど変わらないですね。

while文

for文以外にもwhile文を使って繰り返し処理を実装することができます。

while文の書き方は、下記のとおりです。

while文
<?php
  while (条件式){
    繰り返し処理
  }
?>

while文では、条件式がtrueの場合に処理を実行します。
つまり、もし下記のようなコードを実行してしまうと、無限に処理を繰り返してしまい、PCがフリーズしてしまうこともあります。
そのため、下記のコードは実行しないでください。

もし、実行してしまった場合は、タブを閉じるか、ブラウザを閉じてください。
閉じる過程でフリーズしてしまうかもしれませんが、 もしそうなった場合は、気長に待ちましょう笑

実行しないで!!!
while (true) {
  echo "無限ループ";
}

そのため、while文を使うには、処理の中に繰り返し処理が終わる仕組みを記述しておかなければなりません。
index.phpを下記の通り編集してください。

index.php
<?php
  $num = 10;

  while ($num > 0){
    echo $num;
    $num--;
  }
?>

ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
php_16.png

条件式は$num > 0なので、変数numが0より大きければ、処理を実行するようになっています。
また、処理の中で$num--とすることで変数numがデクリメントされ、1ずつ減っていくように記述されています。
そのため、ブラウザには10から1までが表示されました。

foreach文

配列の要素をまとめて処理したいときに使われるのがforeach文です。
while文やfor文などと比べて、より簡潔に記述できますので、ぜひマスターしましょう!

foreach文では、配列の各要素に繰り返し(ループ)処理を行うため、while文やfor文のように、繰り返しを終了する条件を記述する必要はありません。

なぜなら、配列の要素がある分だけ繰り返し処理したらループを抜けるためです。

foreach文の書き方は、下記のとおりです。

foreach文
<?php
  foreach (配列の変数; as 各要素が格納される変数;){
    繰り返し処理
  }
?>

たとえば testsという変数を作り、これを配列にします。
index.phpを下記の通り編集してください。

index.php
<?php
  $tests = [ '国語', '算数', '理科', '社会' ];
  foreach ( $tests as $test ) {

    echo $test. '<br>';
  }
?>

ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
php_17.png

国語、算数、理科、社会と配列testsに含まれていた4つの要素に対して繰り返し処理を実行できました。

繰り返し処理を実装できる構文は、他にもたくさんあります。
PHPを使っているうちに出会うことがあるかもしれません。
その時は、その出会いに感謝して、たくさん調べてあげてください!

★検索ワード
・PHP 繰り返し処理 やり方
・PHP for文 使い方
・PHP while文 使い方
・PHP foreach文 使い方

関数について

フォルダ名:「function」

今回のレクチャーでは、関数という概念について説明し、実際に使っていきたいと思います。
まず、関数を一言で説明すると「複数の処理を1つにまとめて名前を付けたもの」となります。

プログラミングしていると、同じような処理を複数回必要とする場合がでてきます。
このようなタイミングで、処理を予めひとまとめにしておいて、何度も呼び出す形で利用することができれば、コード全体の「構造化」と「効率化」を向上させることが可能になるのです。

実は、PHPで最初から用意されている関数も存在しています。
今まで使用していたvar_dump()も関数です。
このように、PHPで最初から用意されている関数は、「組み込み関数」や「ビルトイン関数」などと呼ばれています。

一方で、自分で作り出す関数のことは、「ユーザー定義関数」などと呼ばれています。
本レクチャーでは、この「ユーザー定義関数」について学習していきます。

関数の作り方は以下の通りです。

関数
<?php
  function 関数名() {
    // 処理
  }
?>

まず、関数の宣言としてfunctionと記述します。
そして、関数の名前をその後に記述します。
今回の例では、関数名をsampleとしています。

しかし、関数は「宣言」をしただけではコードが実行されることはありません。
関数は、宣言したあとに呼び出すことではじめて利用することができるようになります。
ここでは「呼び出す」という表現を使っていますが、簡単に言えば「作成した関数を実行する」という意味です。

まだ何を言っているか掴めないと思うので、手を動かしながら覚えていきましょう。

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

index.php
<?php
  function sample () {
    echo '何も処理はされません';
  }
?>

それでは、ファイルをブラウザで確認してください。
ブラウザには何も出力されていないと思います。

これはなぜかと言うと、「関数を実行していないから」です。

関数を実行したいときは「関数の呼び出し」を行う必要があります。

呼び出しはとても簡単で、以下のように行うことができます。

関数の呼び出し
<?php
  関数名 ();
?>

関数名だけでなく()も忘れずに入れてくださいね。
この部分はJavaScriptと同じく引数を記述する部分ですが、PHPの「引数」に関しては、他レクチャーで説明させていただきます。

それでは、先程の関数sampleを呼び出してみましょう!
index.phpを下記の通り編集してください。

index.php
<?php
  function sample () {
    echo 'これはブラウザにに出力されます';
  }

  sample();
?>

それでは、ファイルをブラウザで確認してください。
無事にこれはブラウザにに出力されますという文字列がブラウザに出力されていると思います。

ちなみに、関数は使い回すことができるので、好きな場所で何回でも呼び出すことができます。

関数を10回呼び出してみる
<?php
  function sample() {
    echo '処理を10回呼び出すよ!';
  } 

  sample();
  sample();
  sample();
  sample();
  sample();
  sample();
  sample();
  sample();
  sample();
  sample();

  // for文を使って書くこともできます。
  for ($i = 0; $i < 10; $i++) {
    sample();
  }
?>

戻り値について

関数には、もう一つ大事な概念があります。
それが、戻り値(返り値)です。

関数では、return文に値を記述することで、関数の呼び出し元へ値を返すことができます。
何を言っているのかわからないと思うので、まずは、書き方と実際の動きを見てみましょう。

戻り値は下記のコードで実装することができます。

戻り値
<?php
  function 関数名() {
    // 処理

    return 戻り値;
  }
?>

関数の処理の中に、なんだかよくわからないreturn 戻り値;が追加されています。
これを実際のコードで見てみましょう。

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

index.php
<?php
  function sample() {
    $first = 'これは';
    $second = 'テスト';

    $result = $first . $second;
    echo $result;
  }

  echo sample();
?>

ファイルをブラウザで確認してください。
echoを2箇所で使用したにもかかわらず、これはテストという文字列が1つしか出力されていません。

これはどういうことなのでしょうか?

まず、関数sampleは呼び出されるまでは実行されないので、読み飛ばしてください。
ようやく一番下の行でecho sample();とあるので、sample関数の結果をブラウザに出力してくださいという命令があるので、関数sampleを実行します。

関数sampleの中身は、これはテストという文字列を各変数に代入しています。
その代入した変数を文字列連結し、変数resultに格納しています。

そして、関数sampleの最後の行でecho result;としてあるので、ブラウザで最初に出力されたこれはテストの文字列はこの記述で出力されています。

関数sampleは最後の行まで処理を実行したので、echo sample();というコードに戻ります。
ここで疑問が生まれます。
関数sampleは結局何なのかということです。

もちろんPHPも関数sampleが何なのかわからないので、ブラウザ上には何も出力されません。

この問題を解決するのがreturn文です。

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

index.php
<?php
  function sample() {
    $first = 'これは';
    $second = 'テスト';

    $result = $first . $second;
    echo $result;
    return $result;
  }

  echo sample();
?>

ファイルをブラウザで確認してください。
無事にこれはテストという文字列が2回出力されていれば、OKです。

つまり、関数sampleが実行されると、これはテストという文字列を返す関数だということになります。

return文の注意点として、returnを書いた後の処理は実行されることはありません。

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

index.php
<?php
  function sample() {
    $first = 'これは';
    $second = 'テスト';

    return $first;

    $result = $first . $second;
    echo $result;
  }

  echo sample();
?>

ファイルをブラウザで確認してください。
ブラウザにはこれはという文字列しか出力されていませんね。
また、echo $result;も実行されていないので、これはテストという文字列もブラウザには出力されません。

つまり、return文を使用すると、処理をその時点で終了させることもできます。

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

index.php
<?php
  function sample() {
    $first = 'これは';
    $second = 'テスト';

    return;

    $result = $first . $second;
    echo $result;
  }

  echo sample();
?>

ファイルをブラウザで確認してください。
ブラウザ上には何も出力されていませんね。

return文はreturn単体でも使うことができます。
その場合は戻り値を返さずに処理が終わることになります。

そのため、関数sampleを実行しても何も返ってこないので、echo sample()としても何も表示されません。

このreturnはif文などと一緒に使われることも多いです。

if文とreturn文
<?php
  function ticketFee() {
    $old = 10;

    if ($old < 20) {
      echo '20才未満は利用できません';
      return;
    }

    if ($old > 30) {
      echo '利用料は 2,000円です';
    } else {
      echo '利用料は 1,800円です';
    }
  }

  ticketFee();
?>

変数oldが20未満の場合はブラウザに20才未満は利用できませんと出力し、return文を実行します。
もし、変数oldが30より大きかった場合は、利用料は 2,000円ですが出力されます。
また、変数oldが20以上で30以下だった場合は、利用料は 1,800円ですが出力されます。

今回は変数oldが10なので、ブラウザには20才未満は利用できませんと出力され、return文が実行さるので、それ以降の処理は実行されません。

皆さんで変数oldの中身を変えてみると、違う結果が得られますので、興味がある方はぜひ試してみてください。

★検索ワード
・PHP 関数 使い方
・PHP 戻り値とは
・PHP return 使い方

インデントとは

JavaScriptの教材でも説明しましたが、インデントとは、文章の行頭に空白を挿入して、先頭の文字を右に押しやることです。
もちろんPHPでもインデントがあります。

インデント例
<?php
  $indent = 'これはインデントの例';
  if ($indent === 'これはインデントの例') {
    echo 'true'.'<br>';
  }

  for ($i = 0; $i < 5; $i++) {
    echo $i.'<br>';
  }

  function test() {
    echo 'test';
  }

  test();
?>

if ()for()の前にはスペースが2つあり、echo true;echo $i;echo 'test'の前にスペースが4つありますよね?これがPHPのインデントです。

★検索ワード
・PHP インデント

引数について

フォルダ名:「parameter」

前レクチャーでは「関数」について学習しましたが、関数を定義する時に関数名()としていたことを覚えていますか?
実は、この()の中には、値を入れることができます。
この()の中に入れた値のことを「引数」といいます。

まずは手を動かしてみましょう。

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

index.php
<?php
  function sample($text) {
    echo $text;
  }

  sample('これが引数だよ');
?>

ファイルをブラウザで確認してください。
ブラウザにこれが引数だよが出力されていれば、OKです

それでは、引数を説明するためのコードが揃ったので確認していきましょう。

まず、関数sampleは呼び出されるまで実行されないので、そのまま呼び飛ばしてしまいます。

sample('これが引数だよ');と記述してある部分で、ようやく関数sampleを呼び出しています。
また、関数sampleにはこれが引数だよという引数が設定されているので、関数sampleにその文字列を渡してあげることになります。

関数sampleでは、これが引数だよという文字列を引数textとして受け取ります。
引数として受けったので、これ以後関数sampleの中で$textとすることで、これが引数だよという文字列を取得することができるようになりました。

echo $text;とすることで、引数textをブラウザに出力する処理が記述されています。
そのため、ブラウザを確認すると、これが引数だよという文字列が出力されていたのでした。

引数は変数のような扱い方をしますが、宣言する必要はありませんので、そこは注意してください。

より実践的な使い方をしていきましょう。

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

index.php
<?php
  function sample($param) {
    echo $param . '<br>';
  }

  function test($start, $text, $fin) {
    return $start . $text . $fin . '!';
  }

  $start = 'これは';
  $text = 'テキスト';
  $fin = 'です';
  $word = 'こんにちは';
  $num = 10;

  sample('これが引数だよ');
  sample($word);
  sample($num);
  sample(test($start, $text, $fin));
?>

ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
スクリーンショット 2023-03-01 22.17.57.png

上記の例のように、引数には変数を渡すこともできます。
また、引数は、渡す方の名前と受け取る方の名前が同じでも異なっていても受け取ることができます。
そして、引数は何個でも渡すことができます。

★検索ワード
・PHP 引数 使い方
・PHP 引数 複数

外部ファイルの関数呼び出し

フォルダ名:「require」

今回は外部ファイルに定義した関数を呼び出し使用する方法について解説していきます!
世の中に出回っているほとんどすべてのwebアプリケーションは、数十、数百というファイルから構成されています。
すべてのファイルで共通する処理があった場合にすべてのファイルに同じ関数を定義するのはすごく手間です。
そこで、便利な機能として、あるファイルの中で一度定義した関数を別のファイルで使うことが可能です。
早速やってみましょう!

まずは、関数を定義するだけのファイルとして、function.phpを作成し下記の通り編集してください。

function.php
<?php 
  function sample($data){
    if($data == 1){
        return "a";
    }else if($data == 2){
        return "b";
    }else{
        return "c";
    }  
  }
?>

function.phpをブラウザで確認してください。
ブラウザには何も表示されていませんね。

それもそのはずで、ファイル内に1度もechovar_dump()のようなブラウザ出力のための記述がされていないからです。

しかし、ここまでで、関数を外部ファイル化することに成功しました。
外部ファイル化とは別のファイルに関数を記述することです。

次は、外部ファイルに記述した関数を使う(呼び出す)プログラムを学んでいきましょう。

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

index.php
<?php
  $a = 2;
  $b = 1;
  $c = $a - $b;
 
  echo sample($a);
  echo "<br>"; //改行
 
  echo sample($b);
 
  echo "<br>"; //改行
 
  echo sample($c);
?>

index.phpをブラウザで確認してください。
エラーになってしまいましたね。
php_19.png

index.phpではsampleという関数が定義されていないため、エラーとなります。
そこで、function.phpに定義したsaple関数を使えるようにしたいと思います。

require “利用したい外部ファイル名.php”;

とファイルに記述することで外部のファイルを呼び出し、対象のファイルの情報を読み込むことができます。

requireが要求する、という英単語なのでそのままの意味ですね。
index.phpを下記の通り編集してください。

index.php
<?php
  require "function.php"; //function.phpのプログラムを読み込むよ
 
  $a = 2;
  $b = 1;
  $c = $a - $b;
 
  echo sample($a);
  echo "<br>";
 
  echo sample($b);
 
  echo "<br>";
 
  echo sample($c);
?>

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

今度はエラーにならずに結果が表示出来ましたね!

index.phpにはsampleという関数が定義されていませんが、requireでfunction.phpの情報を読み込む事によって、function.phpに定義したsampleという関数をindex.phpで使用することができるようになりました。

最後に、なぜ関数を外部ファイル化するのか?という原点に戻ると「1度作成した関数を他のファイルでも使いたい!」と思ったときに、その関数をその都度コピペして、すべてのファイルに記述するのは非効率です。
例:プログラムの行数が長くなる(メンテナンスがしにくくなる)

そこで、関数を外部ファイル化して、requireを書き、呼び出し可能にしておけば、プログラムの行数を増やさなくてもやりたいことが実現できます。

このように、同じプログラムを何度も書かないということがプログラマーとしての仕事の効率を上げていくことにつながります。
ぜひ、マスターしましょう!

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

フォルダ名:「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を作成し、下記の通り編集してください。

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をブラウザで確認してください。
php_20.png

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

クラスの継承

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

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

クラスの継承書き方
<?php
  class 新しいクラス名 extends 継承したいクラス名{

    public $変数名;
    public $変数名;

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

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

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

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

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をブラウザで確認してください。
php_21.png

画像のように表示されていれば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を下記の通り編集してください。

サンプル2
<?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();

?>

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

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

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

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

formでデータを受け取る

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

PHPにおけるデータの受け取り方には、GETPOST を使う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を以下のように編集してください。

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をブラウザで確認してください。
php_23.png

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

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

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を以下のように編集してください。

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を以下のように編集してください。

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を以下のように編集してください。

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

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

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

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

上記の画像の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を以下のように編集してください。

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をブラウザで確認してください。
php_26.png

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

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

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を以下のように編集してください。

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を以下のように編集してください。

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を以下のように編集してください。

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

⑦送信する側で値を入力し送信する。
ソースも編集したので
更新も兼ねて再度、
php_27.png

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

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

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

メール送信処理

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

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

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の概要はわかっていただけましたか?

わからないところがあった方は教材を読み直して、理解を深めておきましょう!

お疲れさまでした。

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