PHPの変数とは何かについて説明する。また変数の宣言・定義や使い方についても説明する。
文字列・数値・配列の扱い方、参照渡し、変数のスコープ(ローカル変数・グローバル変数)について触れる。
変数とは?
データを一時的に保管しておく箱のようなもの。
PHPの変数の定義と出力
PHPで変数を定義するには、ドル記号の「$」で定義する。
$color = "blue"; //変数を定義する
定義した変数を出力したい場合は、echoやprintを使って出力する。
<?php
$color = "blue"; //変数を定義する
print $color; //定義した変数の値を出力
?>
出力結果:
blue
変数と文字列
変数には文字列を入れることができる。
<?php
$color = "blue"; //文字列を値に入れて定義
print $color; //定義した変数の値を出力
?>
出力結果:
blue
変数と文字列を組み合わせて出力
文字列演算子「. 」を使うことによって、文字列と変数を連結できる。
<?php
$color = "青";
// 文字列と変数を繋げる
echo "色は" . $color . "が好きです。";
?>
出力結果:
色は青が好きです。
""(ダブルクオテーション)と''(シングルクオテーション)での違い
文字列と変数を一緒に出力する場合、""(ダブルクオテーション)と''(シングルクオテーション)で出力が異なる。
<?php
$color = "青";
// 変数を""の中へ。半角スペースを入れないとエラー
echo "色は $color が好きです。";
?>
<?php
$color = "青";
// 文字列と変数を.で繋げる
echo "色は" . $color . "が好きです。";
?>
<?php
$color = "青";
// 変数を{}で囲む
echo "色は{$color}が好きです。";
?>
出力結果:
色は 青 が好きです。
色は青が好きです。
色は青が好きです。
これを同じ形でシングルクオテーションで行ってみる。
<?php
$color = "青";
// 変数を""の中へ。半角スペースを入れなくてもOK
echo '色は $color が好きです。';
?>
<?php
$color = "青";
// 文字列と変数を.で繋げる
echo '色は' . $color . 'が好きです。';
?>
<?php
$color = "青";
// 変数を{}で囲む
echo '色は{$color}が好きです。';
?>
出力結果:
色は $color が好きです。
色は青が好きです。
色は{$color}が好きです。
シングルクオテーションで囲む方法は、変数名がそのまま出てくるパターンもあるので注意。
変数と数値
計算結果を定義することもできる。
<?php
$cul = 5+5;
print $cul;
?>
出力結果:
10
また、数値を入れた変数同士で計算した結果を変数化することもできる。
<?php
$num1 = 5;
$num2 = 10;
$cul = $num1 + $num2;
print $cul;
?>
出力結果:
15
変数と配列
配列は複数のデータを格納することができる。
定義した変数を出力したい場合は、echoやprintだったが、配列を出力したい場合は、print_r($変数);であることに注意。
<?php
$color = [
'blue',
'yellow',
'red'
];
print_r($color);
?>
出力結果:
Array
(
[0] => blue
[1] => yellow
[2] => red
)
変数の名前を決めるときのルール
変数を作成する際には、いくつかのルールがある。
- 大文字と小文字は区別される
- 最初の文字は数字にしてはいけない
- 半角英数字と_以外の記号は使えない
//使える
$example
//使える
$Example
//数字が最初だと使えない
$1example
//_以外の記号は使えない
$example-variable
変数のエラー
変数を使うには最初に変数の宣言が必要だが、変数の宣言がされていないとエラーになる。
例えば最初の例で変数$colorを宣言せずいきなり使おうとすると以下のようなエラーが出る。
<?php
print $color; //いきなり宣言してない変数を使うとエラー
?>
出力結果:
PHP Warning: Undefined variable $color in /workspace/Main.php on line 2
変数の再定義
変数は再定義し直すことができる。
以下は$colorの変数の値を書き直した形。
<?php
$color = "blue"; //変数を定義する
$color = "yellow"; //変数を再定義する
print $color; //定義した変数の値を出力
?>
出力結果:
yellow
変数の参照渡し
参照渡しによって、別の名前の変数の中身を参照することができる。
まずは普通に別の変数の中身を参照するとどうなるか。
<?php
$num1 = 5;
$num2 = $num1; // $num2に$num1の値を代入
$num1 = 50; // $num1の値を変更
echo $num2; // $num1の値が入っている$num2を出力
?>
出力結果:
5
この状態だとPHPが$num1と$num2を違う変数として扱っているので、num1の数字を変えても、num2には特に影響がない。
では参照渡しを使うと?
<?php
$num1 = 5;
$num2 = &$num1; // $num2に$num1の値を参照渡しで代入
$num1 = 50; // $num1の値を変更
echo $num2; // $num1の値が入っている$num2を出力
?>
出力結果:
50
参照渡しを使うと、PHP内部で$num1と$num2を「違う名前を持つ同じ変数」として扱うようになる。
つまり、参照渡しを使うと$num1の値を変えたら$num2の値も変わるようになる。
変数のスコープ
変数のスコープとは、変数が使用できる範囲のこと。
使える範囲によって、変数の種類も異なる。例えば下記のようなものがある。
- ローカル変数...関数の中で宣言して使用する変数
- クラス変数...クラスで宣言した変数
ローカル変数
ローカル変数は、関数の中で宣言して使用できる。
<?php
function example() {
$name = '谷川岳';
echo $name;
}
example();
?>
出力結果:
谷川岳
ここでの例では、関数であるexample(){}の中に、$nameの変数を宣言した。
この$nameはローカル変数なので、関数の外で使おうと思っても、エラーになる。
<?php
function example() {
$name = '谷川岳';
}
echo $name;
?>
出力結果:
PHP Warning: Undefined variable $name in /workspace/Main.php on line 7
グローバル変数
関数外で変数を宣言した場合、「global」をつけることで、関数内で使用できる。
<?php
$name = '谷川岳';
function example(){
global $name;
echo '関数内で出力してます:'.$name;
}
example();
?>
出力結果:
関数内で出力してます:谷川岳
もちろんこれまでの例と同じ通り、グローバル変数はそのまま出力してもOK。
<?php
$name = '谷川岳';
function example(){
global $name;
echo '関数内で出力してます:'.$name;
}
example();
echo 'グローバル変数をそのまま出力:'.$name;
?>
出力結果:
関数内で出力してます:谷川岳グローバル変数をそのまま出力:谷川岳
なぜわざわざ変数のスコープを作るのか?
変数のスコープはなぜ必要なのか?
こちらで別途書いた。
-
-
なんでわざわざ変数のスコープなんて作るのか
初学者として、ややこしく感じる変数のスコープ。 なんでわざわざ変数のスコープなんて作るのか 変数が未定義ですなんてしょっちゅうエラーもでてくるのだが、それも大体私の場合は変数のスコープが原因だったりす ...
続きを見る