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」という名前のフォルダを開く
② htdocsフォルダの中に「php_test」というフォルダを新たに作成する
③ 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>
ファイル、フォルダの作成が完了したら、下記を参考にApache、MySQL を起動してください。
MAMPでの起動方法
①MAMPを開く
②Start Serverボタン押す
XAMPPでの起動方法
①XAMPPのコントロールパネルを開く
②Apache、MySQLの横のSTARTボタンをそれぞれ押す
これでブラウザへの表示の準備が完了しました!
早速下記のURLをクリックし、ブラウザで確認してみましょう!
「 http://localhost:8888/php_test/ 」または「 http://localhost/php_test/ 」
基本設定では、MAMPの方が「 http://localhost:8888/php_test/ 」
XAMPPの方が「 http://localhost/php_test/ 」となります。
※どちらにもアクセスしてみて、下記画像のような画面が表示されるURLを今後は使用してください。
このように表示されれば、OKです!
※うまくいかなかったときは、以下を確認してください。
- Apache、MySQLは正常に起動しているか
- フォルダ名、ファイル名は間違っていないか
- コードは間違っていないか(例:半角文字、半角スペースのはずが全角になっている等)
- :8888が付いているURLと付いていないURLの2パターンを試したか
★検索ワード
・MAMP localhost 表示されない
・XAMPP localhost 表示されない
PHPの書き方
ここからはPHPの書き方の説明をしていきます。
まずHTMLと違ってPHPは書いたコードが必ず画面に出てくるわけではありません。
そこで、まず文字や数字を画面に出力するための方法から学んでいきましょう!
<?php ?>
PHPは<?php(開始タグ)
ではじまり、?>(終了タグ)
で閉じます。
開始タグと終了タグの中に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の中に書いてある
<!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
を下記の通り編集してください。
<!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/
ブラウザでこのように表示されましたね。
では次に、こちらからブラウザで確認してください。
http://localhost:8888/php_test/index.php
または http://localhost/php_test/index.php
と入力して開いてください。
このように出力されましたね。
では最後に
http://localhost:8888/php_test/
または http://localhost/php_test/
ともう一度入力してブラウザで開いてください。
こちら、どういうことかというと
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');
?>
と記述した場合、下記の画像のように表示されます。
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
を下記の通り編集してください。
<?php
$text = "test";
var_dump($text);
?>
では、ブラウザで確認していきます!
http://localhost:8888/var_dump/
または http://localhost/var_dump/
変数の中身を確認する場合には上記のように使用します!
変数text
の中にはtestという文字が格納されていることがわかりますね!
文字列の場合
<?php
var_dump('string');
?>
文字列の場合は先程例に挙げた通りです!
ブラウザで確認する場合は、ブラウザを再読み込みしてください。
数値の場合
<?php
$num = 1234
var_dump(num);
?>
変数に数値を格納し、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()で情報を確認するとそれぞれ下の画像のように表示されます!
それぞれ一緒に見ていきましょう!
配列の場合は、変数の場合と少し表示のされ方が違います。
データ型が表示されているところは変数のときと同じですが、配列の場合には要素数
とインデックス番号
というものが表示されます。
まず、要素数
というのは、対象の配列の中に要素(データ)が何個格納されているのかというものです。
①を例に挙げると、配列array
の中に格納されている要素はstring1
、string2
、string3
の3つの要素が入っているので要素数は3
と表示されています。
続いて、インデックス番号
というのは、配列はその性質上複数の要素を格納することが可能です。
そこで複数ある要素から1つを特定できるように、要素には先頭から順に番号が割り当てられています。
この番号をインデックス番号と呼んでおり「0」「1」「2」...と0から順に番号が割り当てられています。
インデックス番号を指定することで配列から要素を取り出すことも可能です。
実際の使い方は配列のレクチャーで説明していきますので、お楽しみに!
このようにvar_dump()を使用すると、変数や配列の中に格納されている要素(データ)がどのようなものだったのかを確認することが可能なので、コードの記述効率が格段にアップします。
ぜひ使い方をマスターしていってください。
★検索ワード
・PHP var_dump
変数
フォルダ名:「variable」
今回のレクチャーでは、JavaScriptでも学習しましたが、プログラミングの基本となる「変数」について改めて教えていきたいと思います。
プログラミング言語には、あるひと塊に名前をつけることができる「変数」という機能があります。
なぜこのような機能があるかと言うと、プログラミングをしていると、同じようなテキストやデータなどを何度も使い回したい場合が多々あります。
何度も使い回す場合、その都度同じテキストやデータを書き込むのは面倒ですよね。
そんなときに役立つのがこの「変数」なのです。
変数とは、さまざまなものを入れておく「箱」だとイメージするとわかりやすいです。
さて、変数がどのようなものかわかったところで、実際にPHPで変数を使う方法を説明していきます。
PHPでの変数の使い方を説明していくので、フォルダとファイルを準備しましょう!
MAMP(XAMPP)のhtdocsフォルダ内に’variable’という名前のフォルダを作成し、その中にindex.php
というファイルを作成してください。
index.php
を下記の通り編集してください。
早速コードを書いてみてみましょう!
<?php
$text = "PHPで変数を確認";
echo $text;
?>
下記のURLより、ブラウザにアクセスし表示を確認してください。
PHPで変数を確認というテキストが出力されていればOKです!
http://localhost:8888/variable
http://localhost/variable
再代入
PHPの変数もJavascriptの変数と同様に再代入ができます!
以下のコードを見てください。
<?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) |
-1 、0 、1 などの整数 |
浮動小数点(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)
真偽値にはtrue
とfalse
の2つのリテラルがあります。
それぞれはtrueとfalseの値を返すリテラルで、正か偽かの見た目通りの意味となります。
var_dump(true);
// bool(true)
var_dump(false);
// bool(false)
var_dump()
の後のコメントアウトは、全て実行結果です。
整数(Int)
数値は543
や1
のような整数リテラルがあります。
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は「値がない」ということを表現する値です。
$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
を下記の通り編集してください。
<?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 * ten
は5 ✕ 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
を下記の通り編集してください。
<?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
を下記の通り編集してください。
<?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
を下記の通り編集してください。
<?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")
の場合は12
と12
の単純比較なので、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 (条件式) {
// trueの場合の処理を記述
}
条件式なので、最初はtrue
かfalse
が返ってくるような比較演算子や等価演算子を使った式を入れてあげるといいでしょう!
例えば、12 < 100
であれば、12は100より小さいのでtrue
が返ってきますね!
ということは、if文の中の処理が実行されることになります。
if文には、elseif
やelse
というものが存在しています。
- elseif:もし他の場合だった時など、別の条件分岐を作成することができます
- else:if文の最後に記述し、それ以外だった場合という意味になります。
elseif
やelse
を使用することで、さらに複雑な条件分岐を作ることができます。
elseif
やelse
の書き方は、下記のとおりです。
if (条件式) {
// trueの場合の処理を記述
} elseif (条件式) {
// ifの条件式ではfalseだが、else ifの条件式ではtrueだった場合の処理を記述
} elseif (条件式) {
// else ifは何個でも記述可能
} else {
// if、elseifのどれにも当てはまらなかった時の処理を記述
}
書き方が何となくわかってきたと思うので、実際にコードで確認していきましょう!
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 < 30
もtrue
にはなりますが、ブラウザに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()
の後のコメントアウトは、全て実行結果です。
!
が付いていた場合、true
とfalse
を逆の意味で返します。
if文の中で論理演算子を使う
使い方の説明は終わったので、いよいよif文の中で論理演算子を使ってみましょう!
index.php
を下記の通り編集してください。
<?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文の書き方は、下記の通りです。
<?php
switch (式) {
case 値1:
// 式と値1が等しい時の処理
break;
case 値2:
// 式と値2が等しい時の処理
break;
default:
// それ以外の場合の処理
}
?>
式には変数などを入れることが多いです。
その式とcaseの後に記述されている各値とが等しいかを判断し、等しかった場合は処理を実行します。
処理を実行した後は、break;
と記述することで、そのswitch文を終了させます。
このbreak;
を書き忘れると、次のcase処理を続けて実行してしまうので注意してください。
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文の書き方は、下記の通りです。
<?php
for (初期値; 条件式; 増減式) {
繰り返し処理
}
?>
難しい言葉がたくさん並んでいるので、コードを使って確認していきましょう。
まずは、index.php
を下記の通り編集してください。
<?php
for ($i = 0; $i < 10; $i++) {
echo $i;
}
?>
ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
上に書いてある「for文の書き方のコード」と見比べながらコードの中身を詳しく見ていきましょう!
初期値には$i = 0;
が記述されています。
ここでは、i
という変数を定義して、0を代入しています。
条件式には$i < 10;
が記述されています。
$i < 10
がtrue
の場合は、処理を繰り返すことを意味しています。
増減式には$i++
が記述されています。
こちらのコードでは、処理を繰り返すたびに変数iに1を足していくことを意味しています。
この$i++
は、1ずつ足していくということであり、インクリメントと呼ばれます。
一方、$i–-
は、1ずつ減らしていくということであり、デクリメントと呼ばれています。
つまり、1回目にfor文が回る時は、変数iが0なので、$i < 10
がtrue
となり、ブラウザに数値の0
が出力されます。
次に、for文が回る時に、変数iがインクリメントされるので、変数iは数値の1
になります。
数値の1
ということは、$i < 10
がtrue
となるので、ブラウザに数値の1
が出力されます。
これを繰り返していき、最終的に$i < 10
がfalse
となる時に、ブラウザに値が出力されなくなります。
$i < 10
の場合、変数iが10
になるとfalse
になります。
なので、ブラウザのを見ると、数値の9
までが出力されています。
どうでしょうか?少し理解できましたか?
JavaScriptと書き方はほとんど変わらないですね。
while文
for文以外にもwhile文を使って繰り返し処理を実装することができます。
while文の書き方は、下記のとおりです。
<?php
while (条件式){
繰り返し処理
}
?>
while文では、条件式がtrue
の場合に処理を実行します。
つまり、もし下記のようなコードを実行してしまうと、無限に処理を繰り返してしまい、PCがフリーズしてしまうこともあります。
そのため、下記のコードは実行しないでください。
もし、実行してしまった場合は、タブを閉じるか、ブラウザを閉じてください。
閉じる過程でフリーズしてしまうかもしれませんが、 もしそうなった場合は、気長に待ちましょう笑
while (true) {
echo "無限ループ";
}
そのため、while文を使うには、処理の中に繰り返し処理が終わる仕組みを記述しておかなければなりません。
index.php
を下記の通り編集してください。
<?php
$num = 10;
while ($num > 0){
echo $num;
$num--;
}
?>
ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
条件式は$num > 0
なので、変数numが0
より大きければ、処理を実行するようになっています。
また、処理の中で$num--
とすることで変数numがデクリメントされ、1ずつ減っていくように記述されています。
そのため、ブラウザには10から1までが表示されました。
foreach文
配列の要素をまとめて処理したいときに使われるのがforeach文
です。
while文やfor文などと比べて、より簡潔に記述できますので、ぜひマスターしましょう!
foreach文では、配列の各要素に繰り返し(ループ)処理を行うため、while文やfor文のように、繰り返しを終了する条件を記述する必要はありません。
なぜなら、配列の要素がある分だけ繰り返し処理したらループを抜けるためです。
foreach文の書き方は、下記のとおりです。
<?php
foreach (配列の変数; as 各要素が格納される変数;){
繰り返し処理
}
?>
たとえば tests
という変数を作り、これを配列にします。
index.php
を下記の通り編集してください。
<?php
$tests = [ '国語', '算数', '理科', '社会' ];
foreach ( $tests as $test ) {
echo $test. '<br>';
}
?>
ファイルをブラウザで確認し、下記画像のように表示されていれば、OKです!
国語、算数、理科、社会と配列testsに含まれていた4つの要素に対して繰り返し処理を実行できました。
繰り返し処理を実装できる構文は、他にもたくさんあります。
PHPを使っているうちに出会うことがあるかもしれません。
その時は、その出会いに感謝して、たくさん調べてあげてください!
★検索ワード
・PHP 繰り返し処理 やり方
・PHP for文 使い方
・PHP while文 使い方
・PHP foreach文 使い方
関数について
フォルダ名:「function」
今回のレクチャーでは、関数という概念について説明し、実際に使っていきたいと思います。
まず、関数を一言で説明すると「複数の処理を1つにまとめて名前を付けたもの」となります。
プログラミングしていると、同じような処理を複数回必要とする場合がでてきます。
このようなタイミングで、処理を予めひとまとめにしておいて、何度も呼び出す形で利用することができれば、コード全体の「構造化」と「効率化」を向上させることが可能になるのです。
実は、PHPで最初から用意されている関数も存在しています。
今まで使用していたvar_dump()
も関数です。
このように、PHPで最初から用意されている関数は、「組み込み関数」や「ビルトイン関数」などと呼ばれています。
一方で、自分で作り出す関数のことは、「ユーザー定義関数」などと呼ばれています。
本レクチャーでは、この「ユーザー定義関数」について学習していきます。
関数の作り方は以下の通りです。
<?php
function 関数名() {
// 処理
}
?>
まず、関数の宣言としてfunction
と記述します。
そして、関数の名前をその後に記述します。
今回の例では、関数名をsample
としています。
しかし、関数は「宣言」をしただけではコードが実行されることはありません。
関数は、宣言したあとに呼び出すことではじめて利用することができるようになります。
ここでは「呼び出す」という表現を使っていますが、簡単に言えば「作成した関数を実行する」という意味です。
まだ何を言っているか掴めないと思うので、手を動かしながら覚えていきましょう。
まずindex.php
を下記の通り編集してください。
<?php
function sample () {
echo '何も処理はされません';
}
?>
それでは、ファイルをブラウザで確認してください。
ブラウザには何も出力されていないと思います。
これはなぜかと言うと、「関数を実行していないから」です。
関数を実行したいときは「関数の呼び出し」を行う必要があります。
呼び出しはとても簡単で、以下のように行うことができます。
<?php
関数名 ();
?>
関数名だけでなく()
も忘れずに入れてくださいね。
この部分はJavaScriptと同じく引数を記述する部分ですが、PHPの「引数」に関しては、他レクチャーで説明させていただきます。
それでは、先程の関数sampleを呼び出してみましょう!
index.php
を下記の通り編集してください。
<?php
function sample () {
echo 'これはブラウザにに出力されます';
}
sample();
?>
それでは、ファイルをブラウザで確認してください。
無事にこれはブラウザにに出力されます
という文字列がブラウザに出力されていると思います。
ちなみに、関数は使い回すことができるので、好きな場所で何回でも呼び出すことができます。
<?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
を下記の通り編集してください。
<?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
を下記の通り編集してください。
<?php
function sample() {
$first = 'これは';
$second = 'テスト';
$result = $first . $second;
echo $result;
return $result;
}
echo sample();
?>
ファイルをブラウザで確認してください。
無事にこれはテスト
という文字列が2回出力されていれば、OKです。
つまり、関数sampleが実行されると、これはテスト
という文字列を返す関数だということになります。
return文の注意点として、return
を書いた後の処理は実行されることはありません。
index.php
を下記の通り編集してください。
<?php
function sample() {
$first = 'これは';
$second = 'テスト';
return $first;
$result = $first . $second;
echo $result;
}
echo sample();
?>
ファイルをブラウザで確認してください。
ブラウザにはこれは
という文字列しか出力されていませんね。
また、echo $result;
も実行されていないので、これはテスト
という文字列もブラウザには出力されません。
つまり、return文を使用すると、処理をその時点で終了させることもできます。
index.php
を下記の通り編集してください。
<?php
function sample() {
$first = 'これは';
$second = 'テスト';
return;
$result = $first . $second;
echo $result;
}
echo sample();
?>
ファイルをブラウザで確認してください。
ブラウザ上には何も出力されていませんね。
return文はreturn
単体でも使うことができます。
その場合は戻り値を返さずに処理が終わることになります。
そのため、関数sampleを実行しても何も返ってこないので、echo sample()
としても何も表示されません。
このreturn
はif文などと一緒に使われることも多いです。
<?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
を下記の通り編集してください。
<?php
function sample($text) {
echo $text;
}
sample('これが引数だよ');
?>
ファイルをブラウザで確認してください。
ブラウザにこれが引数だよ
が出力されていれば、OKです
それでは、引数を説明するためのコードが揃ったので確認していきましょう。
まず、関数sampleは呼び出されるまで実行されないので、そのまま呼び飛ばしてしまいます。
sample('これが引数だよ');
と記述してある部分で、ようやく関数sampleを呼び出しています。
また、関数sampleにはこれが引数だよ
という引数が設定されているので、関数sampleにその文字列を渡してあげることになります。
関数sampleでは、これが引数だよ
という文字列を引数textとして受け取ります。
引数として受けったので、これ以後関数sampleの中で$text
とすることで、これが引数だよ
という文字列を取得することができるようになりました。
echo $text;
とすることで、引数textをブラウザに出力する処理が記述されています。
そのため、ブラウザを確認すると、これが引数だよ
という文字列が出力されていたのでした。
引数は変数のような扱い方をしますが、宣言する必要はありませんので、そこは注意してください。
より実践的な使い方をしていきましょう。
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です!
上記の例のように、引数には変数を渡すこともできます。
また、引数は、渡す方の名前と受け取る方の名前が同じでも異なっていても受け取ることができます。
そして、引数は何個でも渡すことができます。
★検索ワード
・PHP 引数 使い方
・PHP 引数 複数
外部ファイルの関数呼び出し
フォルダ名:「require」
今回は外部ファイルに定義した関数を呼び出し使用する方法について解説していきます!
世の中に出回っているほとんどすべてのwebアプリケーションは、数十、数百というファイルから構成されています。
すべてのファイルで共通する処理があった場合にすべてのファイルに同じ関数を定義するのはすごく手間です。
そこで、便利な機能として、あるファイルの中で一度定義した関数を別のファイルで使うことが可能です。
早速やってみましょう!
まずは、関数を定義するだけのファイルとして、function.php
を作成し下記の通り編集してください。
<?php
function sample($data){
if($data == 1){
return "a";
}else if($data == 2){
return "b";
}else{
return "c";
}
}
?>
function.php
をブラウザで確認してください。
ブラウザには何も表示されていませんね。
それもそのはずで、ファイル内に1度もecho
やvar_dump()
のようなブラウザ出力のための記述がされていないからです。
しかし、ここまでで、関数を外部ファイル化することに成功しました。
外部ファイル化とは別のファイルに関数を記述すること
です。
次は、外部ファイルに記述した関数を使う(呼び出す)プログラムを学んでいきましょう。
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
をブラウザで確認してください。
エラーになってしまいましたね。
index.php
ではsampleという関数が定義されていないため、エラーとなります。
そこで、function.php
に定義したsaple関数を使えるようにしたいと思います。
require “利用したい外部ファイル名.php”;
とファイルに記述することで外部のファイルを呼び出し、対象のファイルの情報を読み込むことができます。
require
が要求する、という英単語なのでそのままの意味ですね。
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
を作成し、下記の通り編集してください。
<?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
を呼び出すためのインスタンスを作成します。
いすは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();
?>
###どのアクセス修飾子を使うべきか
アクセス修飾子を指定せず、すべてを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>
③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>
③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の概要はわかっていただけましたか?
わからないところがあった方は教材を読み直して、理解を深めておきましょう!
お疲れさまでした。