データの入れ物になる変数
5.1 データの入れ物になる変数
プログラムでデータを取り扱う場合には、必ず変数という箱のような「データの入れ物」を利用します。この箱に入っているデータを出し入れすることで、データに応じた処理を行います。
5.1.1 変数について知っておこう
プログラムでは色々な種類のデータを扱いますが、データを扱う処理では、そのデータを保持しておく「領域」が必要です。それが変数です。
変数は、よく「箱」に例えられます。たとえば、事務処理などでは、色々な種類の書類を箱に入れて管理することがよくあります。請求書を管理する箱、注文書を管理する箱、などです。この場合、箱に入れる請求書や注文書などの書類が「データ」です。そして、そのデータを入れておく箱が「変数」です。変数は、様々なデータを出し入れできる箱の役割をします。
図 5.1.1 データの入れ物 変数イメージ
コンピュータにはメモリと呼ばれるデータを記憶できるものがあり、プログラムの処理中に扱うデータは、メモリのどこかの領域に保存されます。その領域に名前を付けたものが変数です。変数を利用すると一時的にデータを保存でき、別の場所でもそのデータを何度も使うことが可能になります。
5.1.2 変数の名前の付け方
変数は、「データ(値)を保持しておく箱」です。箱は、そのなかに何が入っているかがわかるように、あるいは別の箱と区別できるようにしておく必要があります。先程の事務処理の例で言うと、箱に「請求書」や「注文書」などと書いたシールを貼り付けるかもしれません。このように、データを入れるための箱につける名前を変数名といいます。
変数の命名規則
- 変数名の先頭は必ず「$(半角ドル)」で始まる。
- 使用できる文字は「半角英数字」と「_(アンダーバー)」のみ利用できる。
- $の後の最初1文字目に「数字」は利用できない。
- 英字の大文字、小文字は「区別される」ので、1文字でも違えば同じ単語名でも利用できる。
上記の命名規則を守り、変数の用途が分かるように分かりやすい名前をつけましょう。
5.1.3 変数の使い方
変数の使い方はとてもシンプルで、以下の流れになります。
①変数にデータを入れる(格納する)。
②変数に入れたデータを見る(参照する)。
①の変数にデータを入れる操作のことを「変数への代入」、②の変数に入れたデータを見る(使う)ことを「変数値の参照」ともいいます。
図 5.1.2 「変数への代入」と「変数値の参照」のイメージ
5.1.4 変数を使ってみよう
では実際に変数をプログラムで使うための手順を説明します。まずは変数を利用できるように宣言を行います。
書式:変数の宣言
凡例:変数の宣言
以下に凡例の1つ目の$varを使って変数を宣言するイメージを示します。
図 5.1.3 変数の宣言
凡例:変数の宣言が出来ない場合
変数の宣言は、命名規則に必ず従う必要があります。下の例のような変数名はNGです。
変数名をつける際には注意してください。
また、変数を宣言すると、コンピュータのメモリ上にデータを保存する領域が確保されます。これで値を入れる「箱」ができるわけですが、この状態ではまだ箱の中は空のままです。
箱(変数)の中に値を入れるには代入演算子「=」を使用します。
書式:変数への値の代入
代入演算子「=」の右側の値が左側の変数に代入されます。
凡例:変数への値の代入
例えば、「$val = 2011;」の処理が実行される場合は、以下の図のようなイメージになります。
図 5.1.4 変数へ値の代入
宣言した変数に初めて値を代入することを、「変数の初期化」と言い、その値を初期値と呼びます。
◉ポイント
・変数に値を代入したい場合は代入演算子「=」を使って行う。プログラムの世界では「=」は変数に値を代入することを表すもので、等しいという意味を表すものではありません。
変数に代入したデータを利用するプログラム
変数にデータを代入して、そのデータをWebブラウザに表示して確認してみましょう。
ソース・フォルダ:myproj_super_intro/ch05
ファイル名 :variable.php
アクセスURL :http://localhost/myproj_super_intro/ch05/variable.php
➢ variable.java
<?php //名前用の変数 $name = "神田ゴロウ"; //身長用の変数 $height = 169.5; //年齢用の変数 $age = 19; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php echo $name,'さんの身長は',$height,"cmです。<br>"; echo "年齢は",$age,"歳です。"; ?> </body> </html>
実行結果
解説
このプログラムでは3つの変数が宣言され、それぞれに値を代入しています。
まずは3行目で、名前用の変数「$name」を宣言し、同時に初期値として文字列の「”神田ゴロウ”」を代入しています。
続いて6行目で、身長用の変数「$height」を宣言し、同時に初期値として小数点付きの数値の「169.5」を代入しています。
最後の1つ9行目で、年齢用の変数「$age」を宣言し、同時に初期値として数値の「19」を代入しています。
図 5.1.5 それぞれの変数に値を代入
それぞれの変数の準備が終わった後は、<body>タグ内の記述で先程準備した変数を利用してWebブラウザにメッセージを出力します。
まずは、17行目でecho文を利用して変数$name、$heightと文字列を出力しています。
変数名をプログラムで指定することは、変数の中のデータを参照することになります。その結果、Webブラウザへは以下の図5.1.6のようなイメージでメッセージが出力されます。
図 5.1.6 変数$nameと$heightの値を参照し、echo文でWebブラウザへ出力する
18行目では17行目と同じように、echo文で変数$ageのデータと文字列を「,(カンマ)」で繋げて表示させています。
図 5.1.7 変数$ageの値を参照し、echo出力命令文でWebブラウザへ出力する
◉ポイント
・ 変数は様々なデータを格納することができる。
変数の中のデータは参照してもなくならない
変数を参照したとき、データがそっくり取り出されて箱の中身がカラになるように感じる方もいるようです。実際には、中のデータはそのまま変数に残ります。そのため、変数のデータは何度でも使うことができます。
文字列を連結するには「,(カンマ)」と「.(ドット)」の2つ方法があります。
文字列を繋げるには、「,(カンマ)」以外に「.(ドット)」を使うことができます。当節のvariable.phpサンプルの17行及び18行では「,(カンマ)」を使って文字列を連結しています。学習されている方からしばしば「.(ドット)」で文字列を連結してはだめなのか、という質問があるので、ここでは「,(カンマ)」以外に「.(ドット)」を使っても文字列を連結できることを説明します。
以下に、「,(カンマ)」と「.(ドット)」を使った例を示します。
「.(ドット)」を使った例: 「echo “年齢は” . $age . “歳です。”;」
「,(カンマ)」を使った例: 「echo “年齢は” , $age , “歳です。”;」
どちらの方法も『「年齢」と「変数$ageの値」と「歳です。」』の3つの文字列を一つの文字列に繋げて、同じ結果が得られます。両方とも「年齢は19歳です」と表示されます。
となると、「,(カンマ)」と「.(ドット)」のどちらを使うのが良いのか疑問がわいてくると思います。結論は、「プログラマーのお好みで使って良い」です。ただし、プログラムを組むときにはプログラムを読みやすくするために、どちらか一つに統一して使うことをお勧めします。
“ ”(ダブルクォーテーション)と’ ’(シングルクォーテーション)との違い
PHPで文字列を扱うには「” “(ダブルクォーテーション)」もしくは「 ‘ ‘(シングルクォーテーション)」を使用します。文字列を括るときにどちらを使うかによって変数の扱い方が異なります。
・ダブルクォーテーション ・・・ 文字列中の変数を変数値に置換する(これを変数展開ともいう)
・シングルクォーテーション ・・・ 文字列中の変数を変数値に置換しない
『変数の置換(展開)を行う必要が無い場合は、「シングルクォーテーション」でも「ダブルクォーテーション」でもどちらを使ってもよいです。』
1. 「” “(ダブルクォーテーション)」の場合
文字列中に変数を入れている場合、変数の値に置換(展開)されて表示されます。
$age = ’19’;
echo “年齢は $age 歳です。”; //方法1)変数$ageの前後に半角スペースを入れる必要がある
echo “年齢は{$age}歳です。”; //方法2)変数$age前後に半角スペースがなくても{}で囲めばよい
echo “年齢は”,$age,”歳です。”; //方法3)「,(カンマ) 」を使用して文字列を繋げているだけです
//–上記の3つの方法は、同じ結果「年齢19歳です。」 と表示される。
2.「 ‘ ‘(シングルクォーテーション)」の場合
文字列中に変数を入れていた場合でも、変数名が置換されずそのまま表示されます。
echo ‘年齢は $age 歳です。’; //上記の方法1)と同じでここではシングルクォーテーション使用
//–ここでは「年齢 $age 歳です。」 と変数が置換(展開)されずにそのまま表示される
文字列中にクォーテーションや特殊文字が重複する場合
文字列中にクォーテーションや特殊文字が重複する場合は別の引用符で囲むかエスケープ処理をします。
■間違った構文
<?php
// この構文はエラーが出ます。
echo “<a href=”http://www.kanda-it-school.com”>神田ITスクール</a>”;
?>
この構文を実行すると、エラーが表示されて実行されません。その理由は、「echo “文字列”」の括りの中にさらに「”」が入り、同じ引用符を重複して使っているからです。
■別の引用符で囲む
文字列を扱うのに使った引用符とは別の引用符で括る以下のような記述方法でもよいです。
つまり、「”」中では「’」をもしくは「’」の中では「”」を用いることができるとの意味です。
<?php
// 文字列としての扱いは「”」。HTMLの属性として「’」
echo “<a href=’http://www.kanda-it-school.com’>神田ITスクール</a>”;
?>
このように文字列を括るのに「”」とその文字列の中に「’」を使用しています。これは別の引用符で囲んでいる意味なので問題ありません。その逆で「’」の中「”」を用いることもよいです。
■エスケープ処理
<?php
// 重複する「”」の前に\をつけてエスケープ処理をする
echo “<a href=\”http://www.kanda-it-school.com\”>神田ITスクール</a>”;
?>
エスケープ処理とは、文字列を扱う際に、その言語の特別な意味を持つ記号や文字などを、一定のルールに従って別の文字列に変換することをいいます。PHP中では「”(ダブルクォーテーション)」は「文字列を扱う時に括る」という意味を持った記号ですので、この「”」の中でさらにHTMLとしての「”」を扱う場合には同じ引用符を使うのを避ける必要があるため、エスケープ処理を施さなければなりません。PHPでのエスケープ文字は「\」です。このエスケープ文字「\」をエスケープしたい文字の前につけます。
■その他のパターン
文字列の扱いを「’」で行った場合には、その中で「”」を使った場合はエスケープ処理をしなくてよいです。しかし、「’」を使うと重複するのでエスケープ処理を施します。このケースを以下の例で示します。
<?php
// 「’」で文字列を扱い、その中のHTMLタグの属性も「’」を使う場合は、エスケープ処理が必要
echo ‘<a href=\’ http://www.kanda-it-school.com\’>神田ITスクール</a>’;
// 「’」で文字列を扱い、その中のHTMLタグの属性は「”」を使う場合は、エスケープ処理の必要なし
echo ‘<a href=” http://www.kanda-it-school.com”>神田ITスクール</a>’;
?>
5.1.5 変数のデータを入れ替えよう
変数は初期化した後に別のデータを代入することができ、データを自由に変更することができます。
書式:変数への値の再代入
凡例:変数への値の再代入
データの入れ替えはとても簡単です。初めて変数にデータを入れたときのように、変数に代入演算子の「=」を使って新しい値を入れることで、データの入れ替えが行えます。
変数のデータを途中で変更するプログラム
変数のデータを違うデータに変更して、その結果をWebブラウザに表示して確認してみましょう。
ソース・フォルダ:myproj_super_intro/ch05
ファイル名 :changeVariable.php
アクセスURL :http://localhost/myproj_super_intro/ch05/changeVariable.php
➢ variable.java
<?php //名前用の変数 $name = "神田ゴロウ"; //身長用の変数 $height = 169.5; //年齢用の変数 $age = 19; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php echo $name,'さんの身長は',$height,"cmです。<br>"; echo "年齢は",$age,"歳です。"; //$ageの値を20に変更 $age = 20; echo "後1ヶ月で",$age,"歳になります。"; ?> </body> </html>
実行結果
解説
これは、前回のvariable.phpに少し処理が追加されたプログラムになっています。追加部分に関して説明していきます。
18行目では、9行目で代入した変数$ageの値(年齢)を表示しています。21行目では、年齢の変数「$age」の値を「20」に入れ替える処理をしています。同じ変数に値を再代入すると、既に入っていた「19」は無くなり、新しく入れた「20」に入れ替わります。
図 5.1.8 変数ageに別の値を再代入すると、新しい値に上書きされる。
そして23行目では、echo文で年齢変数「$age」をWebブラウザに出力しています。結果として初めに代入した「19」ではなく、21行目で入れ替えた「20」という値が出力されていることが確認できます。
◉ポイント
・ 変数にデータの代入は何度でも行える。
・ 変数に別のデータを入れ、最初に入っていたデータはなくなる。
5.1.6 変数に別の変数のデータを入れよう
変数には、値を代入するのだけでなく、別の変数を使って値を代入することもできます。
そうすることで2つの変数に同じ値を持たせることができます。
書式:変数に別の変数のデータを代入
変数に別の変数のデータを入れるには、代入演算子の「=」を使います。
凡例:変数に別の変数のデータを代入
変数を別の変数に代入することは、右側の変数の値が左側の変数にコピーされることを意味します。凡例の「$var2=$var1」では、変数$var2に$var1の値が代入され、そのとき$var1の値はそのまま残ります。
その結果、変数$var1と$var2の値は同じになります。
この凡例のイメージを図にすると以下のようになります。
図 5.1.9 変数へ別の変数の値を代入
では実際にプログラムで確認してみましょう。
変数へ別の変数の値を代入するプログラム
変数へ別の変数の値を代入し、その結果どちらの変数も同じ値を持つことを、Webブラウザに表示して確認してみましょう。
ソース・フォルダ:myproj_super_intro/ch05
ファイル名 :variableAssignment.php
アクセスURL :http://localhost/myproj_super_intro/ch05/variableAssignment.php
➢ variableAssignment.java
<?php //日本で一番面積の小さい島名の変数 $jIsland = '沖ノ鳥島'; //世界で一番面積の小さい島名の変数に$jIslandの値を代入 $wIsland = $jIsland; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php echo "日本で一番面積の小さい島は、「",$jIsland,"」です。<br>"; echo "世界で一番面積の小さい島も、「",$wIsland,"」となっています。"; ?> </body> </html>
実行結果
解説
まず3行目で変数$jIslandに「沖ノ鳥島」という値を初期値として代入しています。
続いて6行目では3行目で用意した$jIslandの値を$wIslandに代入しています。
図 5.1.10 変数$wIslandへ別の変数$jIslandの値を代入
14、15行目で3、6行目で代入された変数の値をWebブラウザへ出力しています。
実行結果からも分かるように、変数$jIslandとその値を代入された変数$wIslandの値は両方とも同じ「沖ノ鳥島」と表示されています。変数を別の変数に代入することは、右側の変数の値が左側の変数にコピーが行われることが確認できます。