3-2. 変数、データ構造
PHPに限らず、プログラムにおいて「変数」「データ構造」という考えは避けて通れません。
本章では、この2つをじっくり解説していきます。解説を読んで、必ず手を動かしてください。
変数とは
変数とはそもそも何か、書籍やサイトではさまざまな解説がされています。
変数とは箱のようなもので、その中に値を入れる、箱同士を足し算できる、などなど・・・
考え方はいろいろありますが、結局のところ「値を保持するための入れ物」程度の理解で大丈夫です。
学校で習った数学では、ある数をxとしてその2倍にしたものをyとすると、y = 2xの関係が成り立つ、といった学習をした時に出てきた、あの変数と同じです。
変数を「宣言する」
2つの値を足した結果を得る、という機能をもつプログラムを考えましょう。
単純に考えても分かる通り、変数aと変数b、そして結果を格納する変数cの3つが必要です。ちなみにa,b,cは特に意味はなく、x,y,zでもhensuu1, hensuu2, hensuu3 でも保守性はともかく動作的には問題ありません。
以降のプログラムを実行するために、まずはディレクトリを移っておきましょう。ターミナルで以下を実行しておいてください。
cd ~/environment/engineer_basic/php_basic/3-2/study
使いたい変数を用意すること、言い換えれば値を入れる箱を作ることを変数を宣言するといいます。studyディレクトリのindex1.phpを開いてください。ファイルの中身はカラなので、以下をすべてコピペしてください。
<?php
$a = 3;
$b = 2;
$c = $a + $b;
echo $c;
変数は、変数名に$をつけて宣言します。上記index01.phpでいうと$a, $b, $cが宣言にあたります。
末尾のechoは、文字列を表示させるためのコマンドです。これがあるから実行後に値が表示されます。というわけで、index01.phpを実行してみましょう。ターミナルで「php index01.php」と入力してEnterすると実行されます。以降は実行方法の説明は省略しますのでご注意ください。
超見にくい結果が返ってきます。

$aに3、$bに2を代入して、結果を$cに入れて$cを表示させているプログラムです。結果の5はどこにあるのかというと、2行目の先頭にひっそりと表示されています。これは結果が表示された後に改行していないことが原因です。
対応方法はまた後で解説します。
変数には「型」がある
先ほどは数値(整数)を変数に代入しました。では、文字はどうでしょうか?
文字ももちろん変数に格納できます。
<?php
$str = "Hello PHP!";
echo $str;
またもや超見にくい結果が返ってきます。

結果は2行目の先頭のHello PHP!です。ここで実行結果の後で改行するようにしましょう。
<?php
$str = "Hello PHP!\n";
echo $str;
\nはバックスラッシュとnをつなげたもので、これで改行を意味します。
これで動かしてみましょう。新たにファイルを作るまでもないので、上記の index02.php を修正してください。修正するのは、2行目のHello PHP!の末尾に\nを追記するだけです。
すると、以下のような結果が表示されます。

Hello PHP! だけで行ができたので、見やすくなりました。
数値、文字以外の型
1,2,3… といった数値と、a ,b, あ, い, う… などの文字は、日常生活でもよく見るものなので理解できます。それ以外、PHPに限らずプログラミングでは絶対に避けて通れない変数の型があります。
論理値型(Boolean:ブーリアン)という型があります。
細かく解説すれば理解しにくくなるので、一言でいいましょう。1,2,3… や a,b,c, … ではなく「はい」と「いいえ」を格納する型です。「はい」をtrue、「いいえ」をfalseと言い換えて使います。
以下のプログラムを実行してください。
<?php
$a = 1;
$b = 2;
var_dump($a == $b);

結果はfalseが返ってきます。
大事なところなので少しゆっくり解説しましょう。まず $a と $b は先ほど出てきた通り、変数の宣言と代入です。 $a == $b の「==」は、のちに出てくる比較演算子というもので、等しいですか?ということを問うていると思ってください。var_dumpは、カッコ内の内容について詳細情報を表示する命令です。今までのechoでは$a == $bの結果は表示されません。
bool、つまり論理値型のfalse(いいえ)であると表示されました。PHPが「$aと$bは等しくありません」という答えを出したともいえます。
ちなみに$aを2にするか、または$bを1にして再度実行してください。今度はtrue(はい)が返ってくることが確認できるはずです。
この論理値型、今は大した使い方をしていませんが、今後はかなり重要な役割を果たします。よく覚えておきましょう。
配列
今までは、1つの変数に対して値は1つだけでした。しかし、複数の値を一度に複数保持するデータ構造があります。それが配列と呼ばれるものです。
例えば、数値を4つ持った配列とはこんな感じです。
<?php
$array = [100, 200, 300, 400];
単にサンプルとして作ってみただけの配列です。よって数値や個数は何でも大丈夫です。
これを出力するときは、何番目のものを出力したいのかを指定します。
<?php
$array = [100, 200, 300, 400];
// 1番目を出力
echo $array[0] . "\n";
// 2番目を出力
echo $array[1] . "\n";
文字と文字の連結、数値と文字の連結は.(ピリオド)を使用します。
つまり、echoの末尾の .”\n” は100(200)という数字と”\n”という文字を連結させるという意味になり、
内部的には以下のようになっています。
※ 詳しくは次章の「連結演算子」を参照しくてください。
echo "100\n";
echo "200\n";
結果はこうなります。

お分かりの通り、配列の要素を指定する番号はゼロから始まります。よって、1番目の要素が欲しい時は$array[0]になり、2番目の要素は$array[1]になります。この番号を、配列のインデックスといいます。
あともう一つ配列には種類があります。
インデックスではなく、キーを基準とする配列です。連想配列といいます。
<?php
$nengo = [
"showa" => "昭和",
"heisei" => "平成",
"reiwa" => "令和"
];
// 昭和を出力
echo $nengo["showa"] . "\n";
// 平成を出力
echo $nengo["heisei"] . "\n";
// 令和を出力
echo $nengo["reiwa"] . "\n";

キーを指定して、それに紐づく日本語名を取得することができました。
コメント
既にこの章でも登場していますが、プログラムのファイル内で実行したくないメモなどの情報のことをコメントといいます。
コメントするにはプログラムの先頭にスラッシュを2つ付けるだけです。
<?php
// echo "実行されない"
echo "実行される"
このプログラムを動かすと2行目だけが実行されて「実行される」という文字が出力されます。
既存のコードをコメントにして無効化することをコメントアウトといいます。
コメントアウトするのに毎回スラッシュを2回入力するのは冗長なのでショートカットを覚えておきましょう。
Macの方は、command + /
windowsの方は、ctrl + /