変数とは

変数とは、一時的にデータの値を格納する入れ物です。データを格納した後、計算などの処理が加えられ中の値が変化していきましょう。

変数の命名規則

変数を使用する際には、自分で変数名をつける必要があります。変数の命名規則を以下にまとめます。

  • 最初が $(ドルマーク)で始まる。
  • 数字はドルマークの直後に来てはいけない。
  • 変数名に含めることができるのは英数字のみ。

上記の規則をまもり変数に名前をつけましょう。

変数へ値の代入

変数への代入は、イコール(=)を使用します。学校で習う算数(さんすう)ではイコールは左右が等しいという意味でしたが、 PHPの場合は値を代入するという意味になります。

<?php
$char = "PHPの変数";
$var = 10;
?>

変数の破棄

変数は、破棄しなくても処理が終われば破棄されますのでプログラムは正常に動作します。しかしながら、ビックデータを扱うプログラムでは、メモリの節約、またはバグ防止のために配列の値を全てクリアするプログラムが適している場合があります。ですので、変数の破棄を記載しています。変数の破棄には、unset関数を使用します。よく変数の破棄に、nullを代入しているプログラムをよく見かけますが、これは配列の場合にインデックスはクリアされませんので変数の破棄とは異なります。

<?php

$hensu['key1'] = 'test1';
$hensu['key2'] = 'test2';

//$hensu['key1']を破棄します。
unset($hensu['key1']);

var_dump($hensu);

?>
◆実行結果
array(1) { ["key2"]=> string(5) "test2" } 

なお、nullを代入した場合は以下のようになります。nullを代入した場合は、変数は定義されていてnullがセットされている上体となります。

<?php

$hensu['key1'] = 'test1';
$hensu['key2'] = 'test2';

//$hensu['key1']を破棄します。
$hensu['key1'] = null;

var_dump($hensu);

?>
◆実行結果
array(1) { ["key1"]=> NULL ["key2"]=> string(5) "test2" } 

変数の型

●論理値(boolean)
論理値は変数に代入される値が true あるいは false のどちらか代入され真偽の区別を持つ変数です。この型に関して、大文字小文字は区別されません。

<?php
$var = true;
$var = false;
?>

●整数(integer)
小数点をもたない数値の値です。PHPでは、10進数、8進数、16進数が整数となります。

<?php
$var = 10;//10進数
$var = 0x1A;//16進数
?>

●浮動小数点数(float)
浮動少数点数とは、小数点の数値を持った値です。PHPでは、14桁の数値まで扱えます。

<?php
$var = 342398.1817;
?>

●文字列 string
文字列は、テキストを値にした型になります。型が文字列の場合は、”(ダブルクォテーション)もしくは’(シングルクォテーション)で囲います。英字、漢字、ひらがななどが使用できます。

<?php
$str = "PHPの変数";
?>

可変変数

可変変数では、変数名を動的に変更し使用できます。書式は、${$変数名}となり、変数名を{}で囲むことで、動的に変数を生成できます。

<?php

$array = array("hensuname","atai");

//hensunameという変数を作って、ataiという値を入れています。
${$array[0]} = $array[1];

echo $hensuname;
?>

◆実行結果
atai

グローバルスコープ

PHPブロックのすぐ内側からは、グローバルスコープとなり、グローバルスコープで定義されている変数は、別のPHPブロックからもアクセス可能です。このスコープの範囲は、 includeやrequireにより読みこまれたファイルも含んでいます。例えば、以下の例では、インクルードした include.php での処理に変数 $a も使用できます。

<?php
$a = 1;
include 'include.php';
?>

ローカルスコープ

関数やクラスのメソッド内は、ローカルスコープとなります。ローカルスコープ内で定義されている変数は、関数やクラスのメソッドの外側からアクセスすることは出来ません。通常ローカルスコープから、グローバルスコープにアクセス出来きません。この場合、ローカルスコープから、グローバルスコープにアクセスするには、globalキーワードを使用します。

以下の例では、globalキーワードを使用していませんので、グローバルスコープの変数 $hensu1 の値をローカルスコープ内で取得することはできません。

<?php
$hensu1 = 1;//グローバルスコープの変数

function test()
{
    echo $hensu1;//ローカルスコープ変数の参照
}
test();
?>

◆実行結果

globalキーワード

ローカルスコープ内から、グローバルスコープに定義されている変数にアクセスしたい場合は、globalキーワードを使用します。

<?php
$hensu1 = 1;//グローバルスコープの変数

function test()
{
    global $hensu1;//globalキーワードを使用
    echo $hensu1;//ローカルスコープ変数の参照
}
test();
?>

◆実行結果
1

スーパーグローバル変数

スーパーグローバル変数とは、あらかじめ最初からPHPに定義されていて、プログラムのどこからでもアクセスできる変数のことです。これらの変数の多くは、 実行するサーバーの種類、サーバーのバージョンおよび設定に依存しています。各スーパーグローバル変数を以下に記載しています。

$GLOBALS(グローバル変数)

グローバルスコープで定義されている全ての変数を格納している連想配列です。

<?php

$a=100; $b=1;
function keisan(){
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
keisan();
echo $b;//101と出力されます。

?>

このようにグローバル変数を使用すると、ユーザ定義関数外で定義されている変数をユーザ定義関数内でも使用できます。

$_SERVER(サーバー変数)

ヘッダ、スクリプトパスなどwebサーバから取得できる情報を連想配列に格納しています。

<?php
var_dump($_SERVER["HTTP_HOST"]);
?>

◆実行結果
string(19) "blog2.elephantech.net"

サーバ変数の一覧を以下に記載します。

名前 意味
$_SERVER[“HTTP_HOST”] HTTPのHost:ヘッダ
$_SERVER[“HTTP_USER_AGENT”] HTTPのUser-Agent:ヘッダ
$_SERVER[“HTTP_ACCEPT”] HTTPのAccept:ヘッダ
$_SERVER[“HTTP_ACCEPT_LANGUAGE”] HTTPのAccept-Language:ヘッダ
$_SERVER[“HTTP_ACCEPT_ENCODING”] HTTPのAccept-Encoding:ヘッダ
$_SERVER[“HTTP_REFERER”] リファラ(このページに遷移する前にユーザーが閲覧していたページのURL)
$_SERVER[“HTTP_CONNECTION”] HTTPのConnection:ヘッダ
$_SERVER[“HTTP_CACHE_CONTROL”] Proxyサーバーを利用している場合のキャッシュの測度
$_SERVER[“PATH”] Webサーバーのファイルシステム上のパス
$_SERVER[“SERVER_SIGNATURE”] サーバー上で生成される、サーバーのバージョン名とバーチャルホスト名の文字列
$_SERVER[“SERVER_SOFTWARE”] レスポンスヘッダ上に書かれている、 サーバーの認識文字列
$_SERVER[“SERVER_NAME”] Webサーバーのホスト名。バーチャルホストが設定されている場合は、バーチャルホスト名となります
$_SERVER[“SERVER_ADDR”] WebサーバのIPアドレス
$_SERVER[“SERVER_PORT”] Webサーバの通信ポート
$_SERVER[“REMOTE_ADDR”] ユーザーの IP アドレス
$_SERVER[“DOCUMENT_ROOT”] ドキュメントルートのパス
$_SERVER[“SERVER_ADMIN”] Webサーバに設定されているサーバ管理者
$_SERVER[“SCRIPT_FILENAME”] 現在実行されているPHPスクリプトの絶対パス
$_SERVER[“REMOTE_PORT”] Web サーバーへの通信に使用されているポート番号
$_SERVER[“GATEWAY_INTERFACE”] サーバーが使用している CGI のバージョン
$_SERVER[“SERVER_PROTOCOL”] リクエストされた際のプロトコル名とバージョン
$_SERVER[“REQUEST_METHOD”] GET、HEAD、POST、PUT などのページにアクセスする際に使用されたリクエストのメソッド名
$_SERVER[“QUERY_STRING”] 検索引数。たとえば、 http://test.com/test.php?test=123 のようなURLの場合、「test=123」の部分
$_SERVER[“REQUEST_URI”] ページにアクセスするために指定された URI
$_SERVER[“SCRIPT_NAME”] 現在のPHPスクリプトファイルのパス
$_SERVER[“PHP_SELF”] ドキュメントルートからみた、現在のPHPスクリプトファイルのファイル名
$_SERVER[“REQUEST_TIME”] リクエストの開始時のタイムスタンプ

$_GET(HTTP GET変数)

HTTP GETメソッドを通して渡された情報が連想配列形式にて格納されている変数です。
例えば、ユーザーが http://www.test.com/?mode=Test と入力したとします。
上の例の出力は、 たとえば以下のようになります。


<?php
	echo 'パラメータmodeの値:' . htmlspecialchars($_GET["mode"]) . '!';
?>

◆実行結果
パラメータmodeの値:Test!

このように、HTTP GETメソッドの値は、$_GET変数にて取得できます。

$_POST(HTTP POST変数)

HTTP POSTメソッドを通して渡された情報が連想配列形式にて格納されている変数です。
ユーザーが mode=Test と POST したとします。 この場合は、以下のようにHTTP POSTメソッドの値を取得できます。


<!-- 送信元のフォーム -->
<form action="" method="post">
<input type="hidden" name="mode" size="Test"/>
<input type="submit" value="POST送信" />
</form>

<!-- POSTデータを取得するPHPスクリプト -->
<?php
	echo 'パラメータmodeの値:' . htmlspecialchars($_POST["mode"]) . '!';
?>

◆実行結果
パラメータmodeの値:Test!

$_COOKIE(COOKIE変数)

HTTPクッキーの情報が連想配列形式にて格納されています。例えば、”mode” というクッキーが事前に設定されているものとします。この場合は、以下のように値を取得できます。


<?php
	echo 'パラメータmodeの値:' . htmlspecialchars($_COOKIE["mode"]) . '!';
?>

◆実行結果
パラメータmodeの値:Test!

$_ENV(環境変数)

環境変数として現在のPHPスクリプトに渡された連想配列形式の変数です。環境変数の多くは、PHPが実行されているシェルに依存しています。システムが異なればシェルも異なりますので、環境に応じて定義される値、取得できる値は異なります。例えば私の環境では、以下のような値が取得できます。

<?php
	var_dump($_ENV);
?>

◆実行結果
array(6) {
  ["TERM"]=>
  string(5) "xterm"
  ["PATH"]=>
  string(29) "/sbin:/usr/sbin:/bin:/usr/bin"
  ["PWD"]=>
  string(1) "/"
  ["LANG"]=>
  string(1) "C"
  ["SHLVL"]=>
  string(1) "2"
  ["_"]=>
  string(15) "/usr/sbin/httpd"
}

$_FILES(HTTP ファイルアップロード変数)

HTTP POSTメソッドにて、アップロードされたファイル情報の情報が連想配列形式に格納されている変数です。


<!-- 送信元のファイルアップロードフォーム -->
<form enctype="multipart/form-data" action = "" method = "post" >
<input type="file" name="file1">
<input type="submit" name="FILEアップロード" value="FILEアップロード">
</form>

<!-- ファイルアップロードのPOSTデータを取得するPHPスクリプト -->
<?php
	// アップロードファイル情報を表示する。
	echo "ファイル名           : " , $_FILES["file1"]["name"] , "<br />";
	echo "MIMEタイプ           : " , $_FILES["file1"]["type"] , "<br />";
	echo "ファイルサイズ       : " , $_FILES["file_data1"]["size"] , "<br />";
	echo "テンポラリファイル名 : " , $_FILES["file1"]["tmp_name"] , "<br />";
	echo "エラーコード         : " , $_FILES["file1"]["error"] , "<br />";
?>

変数 $_FILESの取得できる配列一覧を以下に記載します。

名前 意味
$_FILES[‘UploadFile’][‘name’] アップロードファイル名
$_FILES[‘UploadFile’][‘type’] MIMEタイプ
$_FILES[‘UploadFile’][‘tmp_name’] テンポラリファイル名
$_FILES[‘UploadFile’][‘error’] エラーコード
$_FILES[‘UploadFile’][‘size’] ファイルサイズ

$_REQUEST(リクエスト変数)

$_GET、$_POST、$_COOKIE、$_FILESのすべての内容を連想配列に格納している変数です。複数のスーパーグローバル変数をまとめている変数です。

$_SESSION(セッション変数)

セッション情報が連想配列形式にて格納されています。例えば、”mode” というセッション情報が事前に設定されているものとします。この場合は、以下のように値を取得できます。


<?php
	echo 'パラメータmodeの値:' . htmlspecialchars($_SESSION["mode"]) . '!';
?>

◆実行結果
パラメータmodeの値:Test!

[対象]
PHP 5.x