UPDATE:2019年05月16日
PHP の 変数
1 Minute Note
- 変数とはデータを保管する容器
- 変数は全てのデータ型を扱える
文字列型 整数型 浮動小数点数型 論理型 配列型
オブジェクト型 リソース型 NULL型任意のデータ型の値を格納 - 変数名
・最初は $(ドル) 記号
・1文字目使用できる文字
[ a~z ] 大文字小文字は区別される
[ A~Z ] 大文字小文字は区別される
[ Ox7F~0xFF ] コードを持つ文字
[ _ ] アンダーバー
・2文字目以降
1文字目に加えて[ 0~9 ]の数字が加わる
・変数名では大文字小文字は区別される - 代入演算子 =(イコール) を使用して変数を作成
- 変数宣言のない変数はNULL値
- 変数への参照は「 =& 」
- 変数のスコープとは変数宣言の場所とその影響範囲
- 宣言場所と有効範囲は関数内部か関数外部で分ける
- スコープは
ローカルスコープ(関数内部)、グローバルスコープ(関数外部)、スタティック変数(関数内部)、関数の引数(関数内部) の4種類 - 変数展開は変数を「" (ダブルクォート)」で囲む
- 可変変数とは変数の名前自体を別の変数で指定すること
「$$変数」となる
変数とは
- 変数とはデータを保管する容器
- 変数は全てのデータ型を扱える
文字列型 整数型 浮動小数点数型 論理型 配列型
オブジェクト型 リソース型 NULL型任意のデータ型の値を格納
変数とは、データを保管するプログラム上の容器です。
変数には、「文字列」、「整数値」、「浮動小数点数値」、「論理値」、「配列」、「オブジェクト」、「リソース」、「NULL値」等、任意のデータ型の値を格納することができます。
イメージとしては引越しの際のダンボールのようなものです。様々なものをダンボールに入れて、「キッチン食器」「2F事務用品」などダンボールという容器に名前を付けます。そして、運び、必要な場所でダンボールを開けて、中身を取り出して、適所に配置します。また、一度ものを詰めたダンボールの中身を、同じダンボールで違うものに入れなおすことも出来ます。また、中身が異なってもかまいません。それと似ています。
変数はプログラムの基本であり頻繁に使用するものです。内容をよく覚えておくと良いでしょう。
変数名
- 変数名
・最初は $(ドル) 記号
・1文字目使用できる文字
[ a~z ] 大文字小文字は区別される
[ A~Z ] 大文字小文字は区別される
[ Ox7F~0xFF ] コードを持つ文字
[ _ ] アンダーバー
・2文字目以降
1文字目に加えて[ 0~9 ]の数字が加わる
・変数名では大文字小文字は区別される
PHPの変数名は常に「$(ドル)」記号で始まります。次に、最初の1文字目として使用できるのは、「アルファベットの大文字と小文字」、「アンダースコア( _ )」、「ASCIIコードで、( 0x7F )から( 0xFF )までの文字」のいずれかのみとなります。2文字目以降には、1文字目で使用できる文字に加えて「数字」も使用できます。変数名の大文字小文字は区別されます。
変数名の例
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $string = 'string';//文字列 $INT = 10;//数値 $_Float; = 1.25;//浮動小数点 $f1 = TRUE;//論理値 $A1; = array(1,2,3);//配列 ?> |
以下の場合、変数名を数値で始めたり、アンダーバー以外の記号を使用しているのでエラーになります。
1 2 3 4 5 | <!-- サンプルコード --> <?php $1varName = '変数名';//ERROR 数値で始めてはいけません。 $var-Name = '変数名';//ERROR アンダーバー以外の記号は使用できません。 ?> |
※変数名には中身がどうのようなデータ型なのか分かる名前の付け方をする人もいます。
プログラミングにおいてネーミング作業は非常に重要なものの一つです。
・文字列なら string の s を頭文字に使用して $sName = ‘山田太郎’;
・数値なら int の i を頭文字に使用して $iZipCode = 1112222;
などとすると名前で自分が意図しているデータ型が連想できます。
自分で意図した型が名前で連想できるとコードが読み易くなるでしょう。
ここで注意しなければならないのは、PHPは型付けの弱い言語で、型付けの宣言がなくてもPHPが文脈から自動的に型付けをします。上記のように $sName という変数があり、文字列型を意図している変数名であっても、データ型を保証しているわけではないということです。実際には数値が格納されていて、整数型である場合もあるでしょう。PHPではそのようなことも起こりえます。コードを見やすくする一つの工夫と考えて下さい。
変数の作成
- 代入演算子 =(イコール) を使用して変数を作成
変数を作成するには代入演算子「=(イコール)」を使用します。PHPの「=(イコール)」は等しいの「イコール」とは意味が違い「代入」を表します。代入演算子「=」を使用して変数に値を代入すると、変数の宣言と値の代入が同時に行われます。
※等しいを意味するのは「==」です。演算子についてはこちらを参照下さい。
変数の宣言+文字列を代入
1 2 3 4 5 | <!-- サンプルコード --> <?php $sVar = '私は東京に住んでいます。';//変数を宣言して文字列を格納 echo $sVar; ?> |
結果は
となります。
変数の宣言+数値を代入
1 2 3 4 5 | <!-- サンプルコード --> <?php $iVar = 1024;//変数を宣言して数値を格納 echo $iVar; ?> |
結果は
となります。
変数の宣言+計算結果を代入
1 2 3 4 5 | <!-- サンプルコード --> <?php $iVarResult = 1+1;//変数を宣言して計算結果を格納 echo $iVarResult; ?> |
結果は
となります。
PHPでは変数の作成時や実行時にデータ型チェックはありません。型はPHPが自動的に定義・解釈します。したがって、同じ変数を使って異なる型の値を代入することが出来ます。
例えば以下のように「数値の代入・出力」→「文字列の代入・出力」→「配列の代入・出力」・・・と続けて行うことが出来ます。この場合変数の値は置き換わり、データ型も変わります。PHPが自動で定義・解釈を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php $vData = 178; //整数型 echo $vData; //出力 $vData = '鈴木'; //文字列型 echo $vData; //出力 $vData = array('name' => '鈴木', 'age' => 39); //配列型 echo $vData['name']; //出力 $vData = TRUE; //論理値型 echo $vData; //出力 $vData = NULL; //NULL型 echo $vData; //出力 ?> |
変数に値を代入すること自体が変数の宣言も兼ねています。変数の型も自動的にPHPで判断されます。
代入値がない変数はNULLと判別
- 変数宣言のない変数はNULL値
宣言されておらず値が代入されていない変数をコード中に突然記述すると、NULL値と判断されます。また、エラーコードを確認すると警告も出てきます。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php if($vUninitialized === NULL){ echo 'NULL値です。'; } ?> |
結果は
となります。
宣言されていない値がまだ代入されていない変数は初期化をしておくと良いでしょう。そうすればコード中で突然使用してもエラーが出なくなります。
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php $sVariable = '';//文字列型の初期化 $iVariable = 0;//整数型の初期化 $fVariable = 0.0;//浮動小数点 $aVariable = array();//配列型の初期化 $oVariable = NULL;//オブジェクト型の初期化 ?> |
変数の参照
- 変数への参照は「 =& 」
「=&」を使用して変数への参照(エイリアス)を作成することができます。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php $sLong = '長い'; $sShort = '短い'; $sLong =& $sShort; echo $sLong; ?> |
結果は
となります。
$sLongの値が削除され、$sLongは$sShortの参照(エイリアス)になります。
変数のスコープ
- 変数のスコープとは変数宣言の場所とその影響範囲
- 宣言場所と有効範囲は関数内部か関数外部で分ける
- スコープは
ローカルスコープ(関数内部)、グローバルスコープ(関数外部)、スタティック変数(関数内部)、関数の引数(関数内部) の4種類
変数のスコープとは宣言された変数がコード中の何処まで影響を及ぼすかという範囲のことです。一度宣言された変数が何処でも使用できるという訳ではありません。変数が宣言された場所とその変数の有効範囲が決められており、それが変数のスコープです。変数のスコープは全部で4種類あります。「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数(パラメータ)」です。これらの変数のスコープ、宣言の場所と有効範囲は関数内部か関数外部で分けることができます。「グローバルスコープ」は関数の外部で宣言された変数のスコープです。「ローカルスコープ」と「スタティック変数」は関数の内部で宣言された変数のスコープです。そして、「関数の引数」として宣言された変数のスコープがあります。以下でそれぞれの詳細を説明します。
グローバルスコープ
- 関数の外部で定義した変数はグローバルスコープのグローバル変数
- グローバル変数はコード中どこからでもアクセスできる
- グローバル変数は関数内部からやフォームやページ間ではアクセスできない
関数の外部で定義した変数は、グローバル変数となります。これは、グローバルスコープのグローバル変数です。この変数はコード中のどこからでもアクセスできます。ですが、関数の内部からグローバル変数にアクセスすることはできません。関数の内部からグローバル変数にアクセスするには、関数内でglobalキーワードを使用してその変数を宣言する必要があります。
グローバル変数とは別にスーパーグローバル変数があります。スーパーグローバル変数はフォームやページ間でのやり取りでも使用する変数です。グローバル変数とは異なります。スーパーグローバル変数についてはこちらを参照下さい。
関数外部のコード中に変数を作成します。これはグローバル変数となります。
グローバル変数はコード中どこからでも使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php $var = '変数を作成しました。'; //コード・・・・ //コード・・・・ //コード・・・・ //コード・・・・ //コード・・・・ //コード・・・・ //コード・・・・ //コード・・・・ //グローバル変数はコード中どこからでも使用できます。 echo $var; ?> |
結果は
となります。
グローバル変数を関数内部へ取り込む場合は、globalキーワードを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- サンプルコード --> <?php //関数 function Increment(){ //globalキーワードでグローバル変数を関数内部で取得する global $iCount; $iCount++; } //変数定義 グローバルスコープのグローバル変数 $iCount = 1; //関数実行 globalキーワードで$iCountを関数内部で取得 Increment(); echo $iCount; ?> |
結果は
となります。
Increment()関数では globalキーワード を使用して グローバル変数の $iCount を取り込んでいます。
global $iCount;の宣言がない場合、結果は 1 となります。
ローカルスコープ
- 関数の内部で定義した変数はローカルスコープのローカル変数
- ローカル変数は関数内部でのみアクセスできる
- ローカル変数は関数外部からアクセスできない
関数の内部で宣言した変数は、宣言した関数内でのみ有効になります。これは、ローカルスコープのローカル変数です。関数内で定義した別の関数も含みます。関数の内部で宣言したローカル変数へは関数の外部からアクセスできません。また、関数の外部で宣言したグローバル変数は通常関数の内部からアクセスできません。
1 2 3 4 5 6 7 8 9 | <!-- サンプルコード --> <?php function Increment(){ $iCount++; } $iCount = 1; Increment(); echo $iCount; ?> |
結果は
となります
関数内部で$iCountを加算しても外部には影響がありません。
スタティック変数
- スタティック変数は関数内部でstaticキーワードを使用して宣言する
- スタティック変数は宣言した関数内部でのみアクセス可能
- 関数が終了しても変数の値は破棄されない
スタティック変数は関数の内部で staticキーワード を使用して宣言する変数です。スタティック変数の値は関数が終了しても破棄されませんが、その関数内でしか使用できません。スタティック変数を宣言するには、staticキーワードを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php function Increment(){ static $iCount = 0; $iCount++; echo "スタティック変数カウンタの現在の値は $iCount です。<br>"; } //関数外部で作成したグローバル変数 $iCount = 10; Increment();//$iCountは保持される Increment();//$iCountは保持される Increment();//$iCountは保持される //関数外部の変数は影響を受けない echo "グローバル変数カウンタの値は{$iCount}です。<br>"; ?> |
結果は
スタティック変数カウンタの現在の値は 2 です。
スタティック変数カウンタの現在の値は 3 です。
グローバル変数カウンタの値は10です。
となります。
関数の引数(パラメータ)
- 関数の引数(パラメータ)は関数定義時に設定する変数
- 引数は関数内部でのみアクセス可能
関数の定義時に、関数の引数(パラメータ)として変数を指定することができます。引数(パラメータ)とは関数の内部へ渡すデータのことです。引数で設定した変数は関数の内部でのみアクセス可能です。
1 2 3 4 5 6 7 8 | <!-- サンプルコード --> <?php function MeansTransportation($choise){ echo "I go by ,{$choise}\n"; } //引数を設定して関数を実行 MeansTransportation('airplane'); ?> |
結果は
となります。
変数の展開(出力)
- 変数展開は変数を「 " (ダブルクォート) 」で囲む
- 「 ' (シングルクォート) 」だと変数は展開されない
ダブルクォート「"」で囲まれた中に変数が配置されると変数が格納されているデータに置き換わります。これを変数展開といいます。つまり、変数に格納されている中身が出力されるということです。
シングルクォート「'」だと変数は展開されません。
例えば、
まず変数を作成します。
1 2 3 4 | <!-- サンプルコード --> <?php $sName ='山田太郎'; ?> |
↓
作成した変数を使用して中身を出力します。
1 2 3 4 | <!-- サンプルコード --> <?php echo "私の名前は $sName です。"; ?> |
↓
ダブルクォート「"」を使用した場合は、変数が展開されて
結果は
となります。
ですが、シングルクォート「'」を使用して
1 2 3 4 | <!-- サンプルコード --> <?php echo '私の名前は $sName です。'; ?> |
とした場合は、変数が展開されずに
↓
結果は
とそのまま文字列が表示されます。
また、引用符で括らずそのまま実行すれば変数は展開されます。
1 2 3 4 | <!-- サンプルコード --> <?php echo $sName; ?> |
↓
結果は
となります。
可変変数
- 可変変数とは変数の名前自体を別の変数で指定すること
「$$変数」となる
変数の名前自体を別の変数で指定することができます。これは条件等によって変数名を可変させたいときに便利です。必要になることがあると思いますので覚えておきましょう。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $varname = 'sCarMaker'; //変数の名前を決めて変数へ代入 $$varname = 'TOYOTA'; //変数へ値を代入 echo $sCarMaker; ?> |
結果は
となります。
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $varname = 'aCarMakers'; //変数の名前を決めて変数へ代入 $$varname = array('TOYOTA','HONDA','NISSAN'); //変数へ値を代入 print_r($aCarMakers); ?> |
結果は
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | <!-- サンプルコード --> <h3>変数の作成</h3> <?php $sName = '山田太郎'; //変数の展開 echo "私の名前は $sName です。"; echo '<br>'; echo '私の名前は $sName です。'; echo '<br>'; echo $sName; echo '<br>'; ?> <br><br> <h3>変数の作成 変数の名前</h3> <?php $sname = '田中'; $SNAME = '鈴木'; $sName = '佐藤'; $iheadCount = 100; $_int = 50; $_underscore = 'アンダースコア'; echo $sname; echo '<br>'; echo $SNAME; echo '<br>'; echo $sName; echo '<br>'; echo $iheadCount; echo '<br>'; echo $_int; echo '<br>'; echo $_underscore; echo '<br>'; ?> <br><br> <h3>変数の作成 同じ変数に違うデータ型を代入</h3> <?php $vData = 178; //整数型 echo $vData; //出力 echo '<br>'; $vData = '鈴木'; //文字列型 echo $vData; //出力 echo '<br>'; $vData = array('鈴木',178); //配列型 echo $vData; //出力 echo '<br>'; $vData = TRUE; //論理値型 echo $vData; //出力 echo '<br>'; $vData = NULL; //NULL型 echo $vData; //出力 ?> <br><br> <h3>可変変数</h3> <?php $varname = 'sCarMaker'; $$varname = 'TOYOTA'; echo $sCarMaker; ?> <br><br> <h3>代入値がない変数</h3> <?php if($vUninitialized === NULL){ echo 'NULL値です。'; } ?> <br><br> <h3>可変変数</h3> <?php $varname = 'aCarMakers'; $$varname = array('TOYOTA','HONDA','NISSAN'); print_r($aCarMakers); ?> <br><br> <h3>変数への参照</h3> <?php $sLong = '長い'; $sShort = '短い'; $sLong =& $sShort; echo $sLong;//最初の値が削除され、$sLongは$sShortの参照(エイリアス)になります。 ?> <br><br> <h3>ローカルスコープ</h3> <?php function IncrementLocal(){ $iCount++; } $iCount = 1; IncrementLocal(); echo $iCount; ?> <br><br> <h3>グローバルスコープ</h3> <?php function IncrementGlobal(){ global $iCount; $iCount++; } $iCount = 1; IncrementGlobal(); echo $iCount; ?> <br><br> <h3>スタティック変数</h3> <?php function IncrementStatic(){ static $iCount = 0; $iCount++; echo "スタティックカウンタの現在の値は $iCount です。<br>"; } $iCount = 10; IncrementStatic(); IncrementStatic(); IncrementStatic(); echo "グローバルカウンタの値は{$iCount}です。<br>"; ?> <br><br> <h3>関数の引数(パラメータ)</h3> <?php function MeansTransportation($choise){ echo "I go by ,{$choise}<br>\n"; } MeansTransportation('airplane'); ?> |
私の名前は 山田太郎 です。
私の名前は $sName です。
山田太郎
変数の作成 変数の名前
田中
鈴木
佐藤
100
50
アンダースコア
変数の作成 同じ変数に違うデータ型を代入
178
鈴木
Array
1
可変変数
TOYOTA
代入値がない変数
NULL値です。
可変変数
Array ( [0] => TOYOTA [1] => HONDA [2] => NISSAN )
変数への参照
短い
ローカルスコープ
1
グローバルスコープ
2
スタティック変数
スタティックカウンタの現在の値は 1 です。
スタティックカウンタの現在の値は 2 です。
スタティックカウンタの現在の値は 3 です。
グローバルカウンタの値は10です。
関数の引数(パラメータ)
I go by ,airplane
タグ(=記事関連ワード)
日付
最終更新日:2019年05月16日