【PHP】変数 – 値の記憶と取得

【PHP】変数 – 値の記憶と取得

PHPでは値の記憶や値の取得を行うことができます。

ここでは、それらを実現する変数について解説します。

検証環境

変数

変数は記憶領域とその名称です。

コンピュータの物理的な記憶領域とその名称として変数名を持ち、文字列や整数値などの値を記憶したり、記憶した値を取得することができます。

変数の基本的な操作は“変数の宣言”、“値の代入(記憶)”、“値の取得”があります。

変数の宣言

変数の宣言は“変数の使用を明示すること”です。

正確にはPHPに変数の宣言がありませんが、他のプログラミング言語には必要な場合があり、プログラミングの素養となりますので覚えておきましょう。

プログラムで値を記憶するには、初めにコンピュータの物理的な記憶領域を確保する必要があります。

変数の宣言は記憶領域の確保とその記憶領域へ名前(変数名)を割り当てます。

基本構文

変数はドルマーク($)と変数名により定義します。

$変数名

変数名はルールに従って、任意の名称に決められます。

ルールは正規表現で表すと^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$のように定められていますが、これは少し覚えにくいので、次のように解釈しておくと良いでしょう。

  • 使用可能な文字はアルファベット(大文字・小文字)・数字・アンダースコア(_
  • 頭文字はアルファベットまたはアンダースコア(_)のみ

なお、PHPのバージョンによっては変数の宣言のみは構文エラーとなる可能性があります。

実際にご自身の環境で試し、エラーが発生する場合は変数の宣言は必要ありません。

サンプル

<?php

___ih_hl_start
$name;
___ih_hl_end

?>
$ php sample.php
$

3行目の$nameが変数の宣言です。

出力はありませんが、nameという変数名の記憶領域を確保した状態になります。

値の代入

値の代入は“変数に値を記憶すること”です。

基本構文

$変数名 = 値

イコール(=)は左オペランドの変数に右オペランドの値を代入(記憶)する代入演算子です。

変数の記憶領域の値を書き換えるイメージです。

代入演算子は算数や数学のイコールとは意味が異なり、左右が等しいことを表すものではないことに注意してください。

サンプル

<?php

// 変数の宣言
$name;

// 値の代入
___ih_hl_start
$name = 'TANAKA';
___ih_hl_end

?>
$ php sample.php
$

7行目の$name = 'TANAKA'が値の代入です。

出力はありませんが、$nameの記憶領域に'TANAKA'が記憶されています。

値の取得

値の取得は“変数の値を取り出すこと”です。

基本構文

$変数名

特別な構文はなく、値を取得する部分に変数を記述するだけです。

サンプル

<?php

// 変数の宣言
$name;

// 値の代入
$name = 'TANAKA';

// 値の取得(と出力)
___ih_hl_start
echo $name;
___ih_hl_end

?>
$ php sample.php
TANAKA

7行目で$name'TANAKA'を代入しました。

10行目の$nameで値を取得しており、その値をechoによって出力しています。

実行結果から値の代入と取得が正常に処理されたことが分かります。

値の再代入

1度代入した変数に対して、再度、値を代入することができます。

<?php

// 変数の宣言
$name;

// 値の代入
$name = 'TANAKA';
echo $name . "\n";

// 値の再代入
___ih_hl_start
$name = 'SUZUKI';
___ih_hl_end
echo $name . "\n";

?>

"\n"は改行のエスケープシーケンスです。
出力時の文字列が改行されるようになります。

$ php sample.php
TANAKA
SUZUKI

11行目が値の再代入です。

代入は変数の記憶領域の値を書き換えるため、8行目のechoによる出力時は$nameの値は'TANAKA'ですが、12行目では'SUZUKI'になっています。

変数の初期化

変数の初期化は“変数の宣言と値の代入を同時に行うこと”です。

<?php

// 変数の初期化
___ih_hl_start
$name = 'TANAKA';
___ih_hl_end

echo $name;

?>
$ php sample.php
TANAKA

変数の初期化はプログラム上は必須ではありません。

しかし、変数の宣言のみは値が不明確な状態になります。

その状態は不具合やバグの原因となるため、特別な理由がない限り変数は初期化しましょう。

注意点

変数の値はプログラムの実行中のみ保持します。

記憶領域や変数名は適宜解放されていき、プログラム終了後は変数にアクセスできません。

同じプログラムを再度実行した場合、変数の宣言時に新しい記憶領域を確保するため、前回実行時の記憶領域とは異なることに注意してください。

※ 厳密には同じ記憶領域になる場合があります。
※ しかし、それはとても低い確率で発生するか意図的にコードを組む必要があり、そのようなプログラムは推奨されません。

演習問題

問題1

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  1. "New World"を変数数に代入
  2. 1の変数をechoで出力
New World!

問題2

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  1. "Hello!"は変数に代入
  2. 1の変数をechoで出力
  3. 1の変数に"It is good weather!"を代入
  4. 1の変数をechoで出力
Hello!
It is good weather!