テクノロジー

2023年1月1日

変数・定数

  • 変数・定数の違いが理解できるようになる
  • 変数の種類が理解できるようになる

変数・定数

PHPの世界でもう一つ重要なのが変数です。
値は変数に代入して使われることがほとんどです。

数値やその他の値は、さまざまな関数で演算され、変数に代入されます。
また、代入はできるが、基本的には一度入れた値を変更しないものを定数といいます。
このように値が変数、定数、関数で操作されていくことで、PHPのプログラムは動いていきます。

変数・定数を使用する際に気をつけること

変数や定数を使用するときに重要なのは、「何を代入しているのか」という情報が伝わるように、変数や定数に適切な名前をつけることです。
共同開発などで自分のコードを第三者が見ることも考えられます。変数名や定数名を見ただけで、何の値が代入されているのか判るように命名をしてください。

変数のルール

変数名をつけるときの命名ルール

PHP の変数は $ の後に変数名が続く形式で表されます。変数名はphp_phpのように、先頭がアルファベットかアンダースコアで始まる必要があります。
※2単語以上で変数名をつける場合は、一般的に区切りの単語の先頭の文字を大文字で表記するキャメルケースを使用します。

例:$userNameなど

- 数字で始めてはならない(よくない例:`$1name`)
- ローマ字は望ましくない(よくない例:`$namae`)
- 漢字も望ましくない(よくない例:`$名前`)

予約語

PHPには予約語と呼ばれる、PHP内で意味を持っているために、変数名として利用できない文字が存在します。
予約語に設定されている文字は、変数や定数として使用することができません。

例:classfunctionなど

変数の参照

定義した変数を使うときは、”参照する”という言葉を使います。
データが代入されている変数を記述すると、変数に代入されているデータが参照され、データが記述されているように処理されるためです。

(例)

[sample.php]

<?php

$name = 'PHP';   // 変数 $name を定義
echo $name . 'さん、こんにちは' . PHP_EOL; // 変数 $name が参照される
PHPさん、こんにちは

文字列の中に変数を埋め込んで出力する(変数の展開)

変数の展開は、文字列の中に変数や計算式の結果などを出力できる機能です。
""の中に変数を入れることで、文字列に変数や計算式の結果を出力できます。

(例)

[sample.php]

<?php

$name = 'PHP';
echo "私の名前は $name です" . PHP_EOL;

[実行結果]

私の名前は PHP です

また、${} で囲むことで、どこまでが変数名かを明示できます。

[sample.php]

<?php

$name = 'PHP';
echo "私の名前は${name}です" . PHP_EOL;

[実行結果]

私の名前はPHPです

定数とは

定数は、一度値を代入すると基本的には変更しません。
定数名は DIVE のように大文字のアルファベットで始まる必要があります。
※2単語以上で変数名をつける場合は_(アンダースコア)を用います。

例:SITE_NAME etc…

定数を定義するには、定数名の前にconst をつけるか define 関数を使います。

[例]

// constを使用する場合
const TAX = 1.1;
// defineを使用する場合
define('TAX', 1.1);

定数への再代入について

定数への代入は一度だけとしておりますが、定義済みの定数への再代入は可能です。
ただし、再代入を前提とした使い方はするべきではないため、再代入すると警告メッセージが表示されます。

[sample.php]

<?php

const SITE_NAME = 'dive';
const SITE_NAME = 'dive into';
echo SITE_NAME . PHP_EOL;
$ PHP sample.php
PHP Warning:  Constant SITE_NAME already defined in /Users/diveintocode/programing/php/version/test/sample.php on line 4
dive

上記の警告メッセージは「SITE_NAMEという定数は、4行目ですでに定義されています」という内容です。

プログラムが読まれる順番

プログラムは上の行から順番に実行されます。
最初の行から一行ずつ順番に実行され、最後の行まで実行されるとプログラムは終了します。
そのため、使用する変数や定数、関数の宣言は、使用する前に記述したり、プログラムの先頭に記述しておく必要があります。

変数や定数を宣言する前に実行すると、以下のようにエラーが発生します。

変数宣言より先に実行した場合

[sample.php]

<?php
 
echo $name; // 宣言の前に呼び出す
$name = "PHP";

[実行結果]

$ PHP sample.php
PHP Warning:  Undefined variable $name in /home/User/Desktop/php_sample/sample.php on line 3

エラーメッセージの中にある Undefined variable は 未定義の変数 を意味しています。
$name という変数を定義する前に echo しようとしているので、参照できないというエラーです。

変数のスコープとローカル変数・グローバル変数

変数にはいくつか種類があります。ここまで学習してきた変数は ローカル変数 と呼ばれるものです。
変数には 参照できる範囲 を意味する スコープ (範囲)があります。”どこで定義したか”によって、スコープが変わる変数がローカル変数です。

ローカル変数のスコープ

ローカル変数は、最も参照できる範囲の狭い種類の変数です。
例えば、関数の外で定義されたローカル変数は、関数の中から参照することはできません。

[sample.php]

<?php
 
$name = 'tom';
 
function postSample() {
    echo $name . PHP_EOL; // Undefined variable エラー
}
 
echo $name . PHP_EOL; // tom と表示される
postSample();

[実行結果]

$ PHP sample.php

tom
PHP Warning:  Undefined variable $name in /Users/diveintocode/programing/php/version/test/sample.php on line 6

$name という変数を postSample 関数の外で定義しているので、参照できないというエラーです。

逆に、関数内で定義されたローカル変数を関数の外から参照することもできません。

[sample.php]

<?php
 
function postSample(){
    $name = 'tom'; // 関数内で変数を定義
  echo $name . PHP_EOL;

}
 
postSample(); // tom と表示される
echo $name . PHP_EOL;  // Undefined variable エラー

[実行結果]

$ PHP sample.php

tom
PHP Warning:  Undefined variable $name in /php_sample/sample.php on line 10

どこからでも参照できるグローバル変数

スコープが変動するローカル変数に対して、常にプログラム上のどこからでも参照できるスコープを持つのが、グローバル変数 です。
グローバル変数の変数名は、関数の外で宣言し、global $変数名 でアクセスする必要があります。
グローバル変数はプログラム上どこからでも参照できます。そのため、複数人で開発をしている際に、知らずに同じ変数名を異なる場所で定義してしまうと、不具合のもとになるので、原則としてグローバル変数は使いません。

まとめ

- PHPで使用する変数や定数には、以下のような種類がある。

Image from Gyazo

公式ドキュメント・参考情報

1. 予約語

2. define

DIVE INTO CODEのことをもっと知ってみませんか?