10日で覚えるPHPのキソ 第 2 回 変数と定数
PHPのキソ(超基礎編)第 2 回は、変数と定数についてお話します。
目に見えないものなので、まずは頭の中でイメージする練習から始めましょう。
変数とは?
変数とは、プログラムの中でデータ(値)を入れておく箱のようなものです。
「$」から始まります。
$aと見たら、$aという名前のついた箱をイメージしてください。
変数の主なルール
変数の名前(変数名)は、基本的に自由につける事ができますが、いくつかのルールがあります。
- 変数名はドル記号($)から始まります。
- 変数名は大文字と小文字を区別します。($aと$Aは別の変数だと認識されます。)
変数名に使えるのは、以下の文字になります。
- 英大文字小文字(a~zもしくはA~Z)
- 数字(ただし、先頭には使えません。)
- _(アンダーバー)
以下の変数名はすでに定義されています。(同じ名前は付けられません)
(一部変数名がマニュアルへのリンクになっています。)
- $this
- $GLOBALS
- $_SERVER
- $_GET
- $_POST
- $_COOKIE
- $_FILES
- $_SESSION
などです。($_GET、$_POSTについては第 8 回でお話しする予定です。)
変数にデータ(値)を入れてみる
<?php
$a = "PHPのキソ";
?>
ここでの「=」は演算子と言われるものです。(詳しくは第 4 回で解説いたします。)
この「=」は、日本語で言うと「代入」です。(「等しい」という意味ではありません!)
『「$a」という箱に、「PHPのキソ」というデータ(値)を入れます。』という意味になります。
変数「$a」に「PHPのキソ」というデータ(値)を入れた後に、再度、変数「$a」に「がんばりましょう!」というデータ(値)を代入すると、どうなるでしょうか?
<?php
$a = "PHPのキソ";
$a = "がんばりましょう!";
print $a;
?>
ブラウザにアクセスすると以下のように表示されます。
(printは命令です。printを使うと変数に入っている値をブラウザに表示できます。)
がんばりましょう!
変数には1つのデータ(値)しか入れることができません。
プログラムは上から下に流れるので、後から代入したデータ(値)が先にあったデータ(値)を上書きしてしまいます。
($aに代入されていた「PHPのキソ」というデータ(値)が、後からの再度の代入によりデータ(値)が上書きされて「がんばりましょう!」というデータ(値)になりました。)
同じ変数名に誤って違う値を代入しないように気をつけましょう。
変数は一時的にデータ(値)を入れておく箱なので、プログラムが終了と同時に存在が消去されます。
定数
定数も同じくデータ(値)を入れる箱のようなものです。
定数に値を入れる(定義する)には、defineという関数を使用します。
(関数については後程解説しますが、ここではざっくり「命令するもの」と覚えておいて下さい。)
定数にももちろん名前をつけますが、変数とは違い「$」マークは使いません。
一般的には大文字を使って表します。
(定数に使える文字のルールは変数と一緒です。)
定数の主なルール
- 定数は、先頭にドル記号($)が必要ありません。
- 定数を定義することができるのは、define関数 のみです。(単なる代入(=)による定義はできません。)
- 定数は一度設定されると再定義または未定義とすることはできません。
- 定数に指定できるのは、スカラデータ(値) (型がboolean, integer, double, string, NULL) のみです。
<?php
define("TITLE", "PHPのキソ");
define("TITLE", "タイトル"); //再定義はできないのでこれは定義されません。
?>
定数にデータ(値)を入れてみる
<?php
define ("TAX" , 1.05);
print 300 * TAX;
?>
定数は、例えば税率のように固定の値を表現する時に使います。
defineという定数を定義する関数を使って、「TAX」という定数の値(1.05)を定義しています。
『「TAX」という名前を付けた定数に、1.05という値を定義します』という意味です。
printを使うと値をブラウザに表示できます。(関数のような働きをしますが、厳密には関数ではありません。)
ここでの「*」は演算子と言われるものです。(詳しくは第 4 回で解説いたします。)
この「*」は、日本語で言うと「掛け算(×)」です。
「300×TAXの値を表示しなさい」という意味になります。
上記のプログラムをブラウザからアクセスすると、
315
と表示されます。
(printにより表示命令があったからです。定義しただけでは表示はされません。)
定数を使うメリット
定数を使うことのメリットは、例えば将来税率が変わった場合、変更点はこの定税率を定義した部分だけです。
さらに、変数のようにプログラムの最中で書き換えられてしまう心配もありません。
定数を使うことによって、効率のよく作業することができます。
変数と定数の大きな違いは?
- 変数は、プログラム内で入っているデータ(値)を変える事ができます。
- 定数は、プログラム内でデータ(値)を変える事ができません。(定義はdefine関数 のみ)
PHPのデータ(値)型
データ(値)には様々な型があり、変数(定数)の型は、入るデータ(値)によって決まります。
型の種類は10種類以上あります。今回は以下の4種類を説明します。
(各型名がPHPマニュアルにリンクしています。ご参照ください。)
- 論理型(boolean)
真偽の値を表します。 データ(値)の値は、TRUE または FALSEです。(大文字・小文字どちらもOK)<?php $a = TRUE; // 値TRUEを$aに代入する ?>
- 整数(integer)
簡単に言うと、数値などです。8進数10進数・16進数。マイナス(負)の数など。<?php $a = 1234; // 10進整数 $a = -123; // 負の数 $a = 0123; // 8進数 (10進数の83と等価) $a = 0x1A; // 16進数 (10進数の26と等価) ?>
- 浮動小数点数(float)
簡単に言うと、小数を扱う値です。下記のような表記ができます。<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
- 文字列(string)
文字が連結されたものです。"PHPのキソ"のように、文字列は、「"」(ダブルクォーテーション)、もしくは「'」(シングルクォーテーション)で囲います。<?php $a = "PHPのキソ"; ?>
「PHPのキソ」という文字列を囲う場合は、「"」(ダブルクォーテーション)でも「'」(シングルクォーテーション)でも変わりはありません。
ただ以下の場合では違いがあります。- 「"」(ダブルクォーテーション)
改行コード(¥n)やタブコード(¥t)を解釈し、変数が展開されます。 - 「'」(シングルクォーテーション)
改行コード(¥n)やタブコード(¥t)を解釈せず、変数が展開されません。
以下のようなプログラムを実行すると…
(printを使うと変数に入っている値をブラウザに表示できます。)<?php $a = "PHPのキソ"; print '1. タイトルは $a です。<br />'; print "2. タイトルは $a です。<br />"; print "3. タイトルは$aです。<br />"; print "4. タイトルは{$a}です。<br />"; print "5. タイトルは".$a."です。<br />"; ?>
ブラウザからアクセスすると、表示は以下のようになります。
1. タイトルは $a です。 2. タイトルは PHPのキソ です。 3. タイトルは 4. タイトルはPHPのキソです。 5. タイトルはPHPのキソです。
1.は、変数を「'」(シングルクォーテーション)で囲っているので、変数が展開されません。
($aがそのまま出力されます。)2.は、変数を「"」(ダブルクォーテーション)で囲っているので、変数が展開されます。
$aの中身のデータ(PHPのキソ)が出力されます。3.は、「"」(ダブルクォーテーション)で囲っているのに、変数部分が表示されません。
なぜでしょうか?表示された2との違いは、プログラムのクォーテーションの中で、変数の後に半角スペースがないことです。
この半角スペースがなく、文字列と変数がくっついた3のような状態だと、変数がどこまでかがPHPエンジンが分からず、出力されません。
回避策は、2のようにスペースを開けるか、4のようにブレス({ })で囲って「変数だ!」という事を分かりやすくしましょう。5は「.」(これも演算子です。詳しくは第 4 回で解説いたします。)を使って、文字列と変数をつないでいます。こんな書き方もできます。
- 「"」(ダブルクォーテーション)
第 2 回まとめ
今回学んだことをまとめてプログラムにしてみましょう
<?php
// これはコメントです。
// 「TAX」という定数に、「1.05」という値を代入します。
define('TAX', 1.05);
// 「$price」という変数に「300」という値を代入します。(数値なのでクォーテーションで囲みません。)
$price = 300;
/*
「$pretax_price」という変数に、
「$price(値は300) × TAX(値は1.05)」の計算結果の値(315)を代入します。
数値(300)は、クォーテーションで囲みません。
*/
$pretax_price = 300 * TAX;
// 「$unit」という変数に、「円」という値を代入します。(文字列なのでクォーテーションで囲みます。)
$unit = "円";
/*
printは「表示しなさい!という命令です」
文字列(「300円の」)は、クォーテーションで囲みます。
数値のみの場合はクォーテーションで囲みません。
「.」という演算子で、文字列と変数をつなげています。
「print "300円の税込みは{$pretax_price}{$unit}です";」
という書き方もできます。
*/
print "300円の税込みは" . $pretax_price . $unit . "です";
?>
表示される結果は以下です。
300円の税込みは315円です
第 2 回ポイント
- 変数・定数は、データ(値)を入れておく箱のようなもの
- 変数・定数ともに名前をつけるのにはルールがある
- 変数はプログラム内で値を変えられる
- 定数はdefine関数のみで値をセットでき、プログラム内で値を変えられない
- PHPでは、入るデータ(値)によって型が決まる
- 文字列は「"」(「'」)で囲み、数値は囲まない
- 変数は、「"」で囲むと展開され、「'」で囲むと展開されない
■ 用語集
■ 参考サイト・文献
修正
※ (誤)$aと$Aは別の関数だと認識されます。 → (正)$aと$Aは別の変数だと認識されます。
修正いたしました。ご指摘ありがとうございます!