オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。今回は、PHPにおける、さまざまな変数の使い方や文字列リテラル、数値リテラル、エスケープシーケンス、ヒアドキュメントと終端IDなどについて解説します【PHP 7.1含め2017年の情報に合うように対応】。
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載「Web業界で働くためのPHP入門」。連載第1回の「初心者がPHPプログラミングを始めるための基礎知識とXAMPPのインストール」では、PHPの概要や特長を紹介し、環境構築や「Hello World!」までの手順などを解説しました。
前回の「知らないと働けないPHPの基本文法/構文と注意点」では、PHPの文の区切りとコメントという、ごくごく初歩の内容を解説しました。
今回はPHPの「変数」と基本的な「リテラル」について解説します。
変数についてよく使われる表現は「数値や文字列といったデータを入れるための入れ物」というものです。「変数に値を格納する」「代入する」という言い回しからもイメージがしやすいのではないでしょうか。
さらに、この入れ物にはそれぞれ固有の名前があり、これを「変数名」と言います。変数名でそれぞれの入れ物を区別し、指し示すことができます。変数名は文法に沿った形で開発者が自由に付けることができます。
なお、データを格納するといってもデータベースなどとは異なり、メモリ上で保持するだけです。プログラムの実行が終わると、変数に格納されたデータは消えてしまうので、長期的に保存したい場合は、データベースやファイルに保存するようなコードを書くことになります。
以下は、変数に数値を格納している単純な例です。
$foo = 1;
何となくでも、「$foo」に「1」を格納しているということは見て取れるかと思います。正確に理解するため、詳しく見ていきましょう。
まず、変数への格納、つまり代入に使うのは「=」で、これを「代入演算子」といいます。「演算子」とは計算や比較を行うための記号のことです。数学でも、例えば「+」記号で加算を行いますが、そういったものが演算子です。
「=」の機能は、右側の値を左側に代入するというものです。ここで、注意していただきたいのは、数学の「=」とは働きが全く違うということです。数学では、左辺と右辺が同値であることを表しますが、プログラムでは「代入」を表します。
左側にある「$foo」が代入先の変数です。変数は変数名の頭に「$」を付けるのが決まりとなっています。右側にある「1」は見ての通り、単なる数値データです。このように、コードに直接書かれているデータを「リテラル」と言います。リテラルについては後ほど解説します。最後のセミコロンは、前回解説した文の区切りです。
「=」の前後には空白がありますが、実は、これはなくてもいいものです。つまり「$foo=1;」と書いても文法上は間違いではありません。しかしこれでは見づらくなるため、演算子の前後には半角空白を1つだけ入れるようにします。これは他の演算子でも同様です。
前回の「PHPにおける文の区切り方」でも、「見づらくなるので1行には1文のみ」ということを述べました。プログラミングは、コードとにらめっこする作業ですから、見やすく書くことは、とても大切なことなのです。文法と同時に、こうした作法も身に付けていきましょう。
次に、さまざまな変数の使い方を見ていきましょう。
以下は、代入した値を表示するだけのコードです。
<?php $foo = 1; print($foo);
実行結果は以下の通りです。
「print()」は()内のものを表示する命令です。前回までは「Hello World!」という文字列を指定していましたが、このように変数を指定することもできます。その際、実行結果から分かるように、変数に格納された現在の値が表示されます。
次のコードは「=」の右側が変数になった例です。
<?php $foo = 1; $bar = $foo; print($bar);
実行結果は図1と同じです。
3行目で変数$barに変数$fooを代入しています。このように変数に変数を代入できますが、その場合、そのときの右辺の変数の値が左辺の変数に格納されます。
それでは、次のコードの結果はどうなるでしょうか?
<?php $foo = 1; $bar = $foo; $foo = 2; print($foo); print("<br>"); print($bar);
実行結果は以下の通りです。
2 1
4行目で変数$fooに別の値を代入、つまり値を上書きしています。このように変数は、値を書き換えることができます。
ところで、変数$fooの値を上書きする前に、3行目で$barに$fooの値を代入しています。この$barの値は、$fooの値が上書きされた後もそのままです。これは、3行目で$fooの値を$barに代入するときに、値がコピーされたことを意味します。
リスト2のようなコード例で、もし書き間違ってしまい、何も格納されていない変数を表示しようとしたら、どうなるでしょうか。すなわち、次のような場合です。
<?php $foo = 1; print($bar);
実行結果は以下の通りエラーとなります。
エラーメッセージには、「Undefined variable: bar」とあります。「定義されていない変数 bar」というエラーです。このように、何も値が格納されていない変数は未定義として扱われ、未定義の変数をいきなりprintしようとすると、エラーになるので注意してください。
変数名にはアルファベット、数字、アンダースコア(_)が利用できます。ただし、変数名の1文字目に数字を使うことはできません。大文字小文字の違いは区別されます。これらの規則を守れば、変数名は自由に付けることができます。
ただし、できるだけ分かりやすいもの、変数の内容が分かるものを付けましょう。例えば、「会員数」のようなものを表す変数だと、単に「$num」とするのではなく、「$numUsers」のようにします。分かりにくい変数名は、読みやすさを損ない、バグの元になります。ネーミングは常に悩ましい問題で、コーディングする際もわりと時間を要する作業です。
上記の変数は、「num」「users」という2単語をつなげています。プログラミングでネーミングをする際、複数の単語をつなげることがよくあります。その際のつなげ方に大きく2種あります。
1つは、それぞれの単語をアンダースコアでつなぎ、例えば、「num_users」のように記述する方法です。これを、「スネーク記法」といいます(「アンダースコア記法」ともいいます)。
もう1つが、上の記述方法で、単語をくっつけた上で、それぞれの単語の頭文字を大文字とすることです。これを「キャメル記法」といいます。キャメル記法も2種あり、1単語目を大文字にするかしないかです。例えば、「NumUsers」とする場合と、「numUsers」とする場合です。それぞれ、「アッパーキャメル記法(UCC)」、「ローワーキャメル記法(LCC)」という言い方もありますが、単に「キャメル記法」といえばローワーの方を指し、アッパーの方は「パスカル記法」という言い方もあります。
PHPの変数名には、基本的にローワーキャメル記法を使用します。
ところで、キャメルでもスネークでもなく、ハイフンで単語をつなぐ方法もあり、これは、CSSの記法でよく使われていますが、「-」が変数名として利用できないことから、PHPプログラミングでは使いません。
上述のように、コードに直接書かれているデータを「リテラル」といいます。ここまでの例で、「リテラル」としては「文字列」と「数値」が出てきました。いずれも基本的なリテラルです。次ページでは、まず「文字列リテラル」から解説しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.