今回は、PHPの初歩の初歩の初歩、変数の扱い方について解説します。
変数とは、プログラム中で扱うデータを一時的に保存しておく箱のようなものです。そんなん知ってるよというあなたもまだ知らない変数の秘密があるかもしれません。ないかもしれません(どっち)。まあ、読んでみてください。
変数の宣言と値の代入
プログラミングにおいて変数を使うときは、まず変数の宣言をする必要があります。変数の名前やどんな種類の値を入れるかを決めるのが変数の宣言です。
ただし、PHPにはこの変数の宣言という仕組みがありません。いきなり変数に値を代入することによって、変数を使い始めることができます。最初に変数に値を代入することを変数の初期化といいます。変数の定義ともいいます。どっちでもOKです。宣言という人もいます。どれでもOKです。
変数に値を代入するには、次のように記述します。
$name = '山田ちぬ';
変数に値を代入するときはイコール=
を使います。上記のコードは$name
という名前の変数に「山田ちぬ」という値を代入しています。
変数名のルール
PHPの変数名のルールは次のとおりです。
- ドル記号
$
の後に変数名を記述する。 - 使える文字は「文字」「数字」「アンダースコア
_
」。文字はアルファベットのほか、日本語なども使える。 - 1文字目に数字は使えない。
- アルファベットの大文字と小文字は区別される。
有効な変数名 | 無効な変数名 |
---|---|
$variable $Variable ($variableとは区別される) $variable_01 $_variable $変数 | variable (ドル記号がない) $variable-01 (アンダースコア以外の記号はNG) $123variable (1文字目の数字はNG) |
変数に入る値の種類(データ型)
PHPには、主に8つのデータ型があります。データ型とは、データの性質や扱われ方の分類のことです。
- 整数型 (int)
- 浮動小数点数型 (float)
- 文字列型 (string)
- 論理型 (bool)
- 配列型 (array)
- オブジェクト型 (object)
- リソース型 (resource)
- NULL
整数型
変数に整数を代入する場合は、引用符をつけません。
//変数に整数を代入
$var = 4649;
//変数の型や値を出力
var_dump($var);
/*出力結果
int(4649)
*/
引用符をつけると、数値ではなく文字列として扱われます。
//変数に整数のような文字列を代入
$var = '4649';
//変数の型や値を出力
var_dump($var);
/*出力結果
string(4) "4649"
*/
浮動小数点数型
浮動小数点数とは、小数のことです。厳密にいうとちょっと違うのですが、ここは何卒。
変数に浮動小数点数を代入する場合は、引用符をつけません。引用符をつけると文字列扱いになるのは整数型と同じです。
//変数に浮動小数点数を代入
$var = 3.14159256;
//変数の型や値を出力
var_dump($var);
/*出力結果
float(3.14159256)
*/
文字列型
変数に文字列を代入する場合は、引用符(シングルクォーテーション'...'
またはダブルクォーテーション"..."
)をつけます。引用符をつけないとエラーになります。
//変数に文字列を代入
$var = 'はろー、わーるど。';
//変数の型や値を出力
var_dump($var);
/*出力結果
string(27) "はろー、わーるど。"
*/
論理型
論理型とは真偽値のことです。true
またはfalse
のどちらかになります。
変数に真偽値を代入する場合は、引用符をつけません。もう言わなくてもわかると思いますが、引用符をつけると文字列扱いになります。
//変数に真偽値を代入
$var = true;
//変数の型や値を出力
var_dump($var);
/*出力結果
bool(true)
*/
真偽値は大文字と小文字を区別しないので、True
でもTrUe
でもOKです。でも、TrUe
とか書く人、私は嫌いです。
配列型
配列とは、複数の値を保持する変数のことです。次のように記述します。
//変数に配列を代入
$var = array('りんご', 'バナ〜ナ', 'マンゴ〜');
//変数の型や値を出力
var_dump($var);
/*出力結果
array(3) {
[0]=>
string(9) "りんご"
[1]=>
string(12) "バナ〜ナ"
[2]=>
string(12) "マンゴ〜"
}
*/
角括弧[]
を使って記述することもできます。
//変数に配列を代入
$var = ['りんご', 877, true];
//変数の型や値を出力
var_dump($var);
/*出力結果
array(3) {
[0]=>
string(9) "りんご"
[1]=>
int(877)
[2]=>
bool(true)
}
*/
ご覧のとおり、配列のそれぞれの値がデータ型を持っています。
オブジェクト型
オブジェクトとは、例えばクラスから生成されたインスタンスのことです。難しいですよね、分からないですよね。今は分からなくてもいいです。変数とは何かを学ぶ段階では知らなくてもいいことです。
//クラス
class MyClass
{
public $name = '山田ちぬ';
}
//MyClassのオブジェクトを生成し、変数に代入
$var = new MyClass;
//変数の型や値を出力
var_dump($var);
/*出力結果
object(MyClass)#1 (1) {
["name"]=>
string(12) "山田ちぬ"
}
*/
リソース型
リソースとは、PHPの外部とやり取りを行うための情報です。難しいですよね、分からないですよね(以下省略)。
//ファイルをオープンする関数を実行し、戻り値(リソース)を変数に代入
$var = fopen('./file.txt', 'r');
//変数の型や値を出力
var_dump($var);
/*出力結果
resource(3) of type (stream)
*/
NULL
NULLとは何も情報を持たないことをあらわす値です。次のように変数に代入することができます。
//変数にNULLを代入
$var = null;
//変数の型や値を出力
var_dump($var);
/*出力結果
NULL
*/
大文字と小文字を区別しないので、Null
でもnUlL
でもOKです。
何もないことをあらわすならば、$var = '';
と同じなのではと思ったあなたは深く反省してください。
//変数に''を代入
$var = '';
//変数の型や値を出力
var_dump($var);
/*出力結果
string(0) ""
*/
このように''
は何もない文字列で、NULLとは別物です。
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
変数の使い方
変数の値を出力する
PHPで変数に代入された値を出力するには、echo
を使います。
//数値の出力
$number = 4649;
echo $number;
/*出力結果
4649
*/
//文字列の出力
$name = '山田ちぬ';
echo $name;
/*出力結果
山田ちぬ
*/
//配列の出力
$fruits = array('りんご', 'バナ〜ナ', 'マンゴ〜');
echo $fruits;
/*出力結果
Array
*/
配列の出力に失敗してしまいました。わ、わざとだからねッ!
配列を出力するときには、print_r()
やvar_dump()
を使います。
//配列
$fruits = array('りんご', 'バナ〜ナ', 'マンゴ〜');
//配列の出力(print_r)
print_r($fruits);
/*出力結果
Array
(
[0] => りんご
[1] => バナ〜ナ
[2] => マンゴ〜
)
*/
//配列の出力(var_dump)
var_dump($fruits);
/*出力結果
array(3) {
[0]=>
string(9) "りんご"
[1]=>
string(12) "バナ〜ナ"
[2]=>
string(12) "マンゴ〜"
}
*/
print_r()
はシンプルな出力、var_dump()
は値のデータ型やバイト数を含む詳細な出力となっております。お好きなほうを使ってください。
配列の中の特定の値だけを出力するには次のようにします。
//配列
$fruits = array('りんご', 'バナ〜ナ', 'マンゴ〜');
//2つ目の値を出力
echo $fruits[1];
/*出力結果
バナ〜ナ
*/
変数名$fruits
の後ろに角括弧[]
で括ったキーを記述します。配列のキーは1つ目が0
、2つ目が1
・・・となっているので、2つ目の値を出力する場合は、$fruits[1]
となります。
変数の値を変更する
変数に入っている値を変更したいならば、新しい値を代入しましょう。それだけで値が上書きされます。
$name = '山田ちぬ';
echo $name;
/*出力結果
山田ちぬ
*/
//改名
$name = '山田ほふ';
echo $name;
/*出力結果
山田ほふ
*/
変数と演算
変数には、演算の結果を代入することもできます。
$result = 3 + 2;
echo $result;
/*出力結果
5
*/
$number = 8;
$result = $number * 2;
echo $result;
/*出力結果
16
*/
$sei = '山田';
$mei = 'ちぬ';
$fullname = $sei . $mei;
echo $fullname;
/*出力結果
山田ちぬ
*/
変数のスコープ
変数のスコープとは、変数がどの範囲で利用できるかを示すものです。PHPには、主に2種類の変数スコープがあります。
- グローバルスコープ
- ローカルスコープ
グローバルスコープ
関数などの外で定義された変数をグローバル変数と言います。グローバル変数はグローバルスコープを持ちます。グローバルスコープを持つ変数は、どこからでも参照可能です。
//グローバル変数を定義
$global_variable = 'グローバル変数の値だよ';
//echoで出力
echo $global_variable;
/*出力結果
グローバル変数の値だよ
*/
はい、当然そうなりますよね。
次に、グローバル変数を関数を介して出力してみます。
//グローバル変数を定義
$global_variable = 'グローバル変数の値だよ';
//グローバル変数の値を出力する関数
function my_function()
{
echo $global_variable;
}
//関数で出力
my_function();
/*出力結果
Notice: Undefined variable: global_variable in /path/to/script.php on line 7
*/
失敗です。どこからでも参照できると言ったじゃないか!嘘つきめ!
グローバル変数は、そのままでは関数の中(ローカル)から参照することができません。そこで、秘密のおまじないglobal
を使います。これで関数の中から参照できるようになりました。
//グローバル変数を定義
$global_variable = 'グローバル変数の値だよ';
//グローバル変数の値を出力する関数
function my_function()
{
global $global_variable;
echo $global_variable;
}
//関数で出力
my_function();
/*出力結果
グローバル変数の値だよ
*/
他に、特別な変数$GLOBALS
を使って次のように書くこともできます。
//グローバル変数を定義
$global_variable = 'グローバル変数の値だよ';
//グローバル変数の値を出力する関数
function my_function()
{
echo $GLOBALS['global_variable'];
}
//関数で出力
my_function();
/*出力結果
グローバル変数の値だよ
*/
ローカルスコープ
関数などの中で定義された変数をローカル変数と言います。ローカル変数はローカルスコープを持ちます。ローカルスコープを持つ変数は、その関数内からのみ参照可能です。
//ローカル変数の値を出力する関数
function my_function()
{
$local_variable = 'ローカル変数の値だよ';
echo $local_variable;
}
//関数で出力
my_function();
//echoで出力
echo $local_variable;
/*出力結果
ローカル変数の値だよ
Notice: Undefined variable: local_variable in /path/to/script.php on line 9
*/
関数を使った出力は成功しましたが、echo
を使った出力は失敗しました。これは、ローカル変数がグロバール領域から参照できないためです。
スーパーグローバル
スーパーグローバル変数は、どのスコープからでも参照可能な変数です。次のようなものがあります。
- $GLOBALS
- $_SERVER
- $_GET
- $_POST
- $_FILES
- $_COOKIE
- $_SESSION
- $_REQUEST
- $_ENV
スーパーグローバル変数は、グローバル領域で使えるのはもちろん、ローカル領域でもglobal
キーワードを使わずに参照することができます。
さいごに
今回はPHPの変数について詳しく解説しました。変数の世界にはまだまだ奥深い部分があって、全てを語り尽くせていないのですが、今日はこれぐらいにしといたるわ(めだか)。
でわでわ
無料で利用できるプログラミング学習サービスをお探しならば Code Lesson はいかがでしょうか。プロのエンジニアが監修した学習ロードマップで効率的に学習、AIに質問、最後にクイズで理解度をチェックできます。
コメント