連載
» 2017年04月24日 05時00分 UPDATE

Web業界で働くためのPHP入門(3):PHPの変数と代入、リテラルとエスケープシーケンス (1/2)

オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。今回は、PHPにおける、さまざまな変数の使い方や文字列リテラル、数値リテラル、エスケープシーケンス、ヒアドキュメントと終端IDなどについて解説します【PHP 7.1含め2017年の情報に合うように対応】。

[山口晴広, 齊藤新三(改訂)/山田祥寛(改訂監修),WINGSプロジェクト]

 オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載「Web業界で働くためのPHP入門」。連載第1回の「初心者がPHPプログラミングを始めるための基礎知識とXAMPPのインストール」では、PHPの概要や特長を紹介し、環境構築や「Hello World!」までの手順などを解説しました。

 前回の「知らないと働けないPHPの基本文法/構文と注意点」では、PHPの文の区切りとコメントという、ごくごく初歩の内容を解説しました。

 今回はPHPの「変数」と基本的な「リテラル」について解説します。

変数とは、変数名とは

 変数についてよく使われる表現は「数値や文字列といったデータを入れるための入れ物」というものです。「変数に値を格納する」「代入する」という言い回しからもイメージがしやすいのではないでしょうか。

 さらに、この入れ物にはそれぞれ固有の名前があり、これを「変数名」と言います。変数名でそれぞれの入れ物を区別し、指し示すことができます。変数名は文法に沿った形で開発者が自由に付けることができます。

 なお、データを格納するといってもデータベースなどとは異なり、メモリ上で保持するだけです。プログラムの実行が終わると、変数に格納されたデータは消えてしまうので、長期的に保存したい場合は、データベースやファイルに保存するようなコードを書くことになります。

PHPにおける変数への格納の仕方と代入演算子

 以下は、変数に数値を格納している単純な例です。

$foo = 1;

 何となくでも、「$foo」に「1」を格納しているということは見て取れるかと思います。正確に理解するため、詳しく見ていきましょう。

 まず、変数への格納、つまり代入に使うのは「=」で、これを「代入演算子」といいます。「演算子」とは計算や比較を行うための記号のことです。数学でも、例えば「+」記号で加算を行いますが、そういったものが演算子です。

 「=」の機能は、右側の値を左側に代入するというものです。ここで、注意していただきたいのは、数学の「=」とは働きが全く違うということです。数学では、左辺と右辺が同値であることを表しますが、プログラムでは「代入」を表します。

 左側にある「$foo」が代入先の変数です。変数は変数名の頭に「$」を付けるのが決まりとなっています。右側にある「1」は見ての通り、単なる数値データです。このように、コードに直接書かれているデータを「リテラル」と言います。リテラルについては後ほど解説します。最後のセミコロンは、前回解説した文の区切りです。

 「=」の前後には空白がありますが、実は、これはなくてもいいものです。つまり「$foo=1;」と書いても文法上は間違いではありません。しかしこれでは見づらくなるため、演算子の前後には半角空白を1つだけ入れるようにします。これは他の演算子でも同様です。

 前回の「PHPにおける文の区切り方」でも、「見づらくなるので1行には1文のみ」ということを述べました。プログラミングは、コードとにらめっこする作業ですから、見やすく書くことは、とても大切なことなのです。文法と同時に、こうした作法も身に付けていきましょう。

さまざまな変数の使い方

 次に、さまざまな変数の使い方を見ていきましょう。

printの対象を変数にする

 以下は、代入した値を表示するだけのコードです。

<?php
$foo = 1;
print($foo);
リスト1 phplesson/chap03/printVariables.php

 実行結果は以下の通りです。

図1 リスト1の実行結果

 「print()」は()内のものを表示する命令です。前回までは「Hello World!」という文字列を指定していましたが、このように変数を指定することもできます。その際、実行結果から分かるように、変数に格納された現在の値が表示されます。

代入演算子の右側に変数を使う

 次のコードは「=」の右側が変数になった例です。

<?php
$foo = 1;
$bar = $foo;
print($bar);
リスト2 phplesson/chap03/assignmentFromVariable.php

 実行結果は図1と同じです。

 3行目で変数$barに変数$fooを代入しています。このように変数に変数を代入できますが、その場合、そのときの右辺の変数の値が左辺の変数に格納されます。

変数の上書き

 それでは、次のコードの結果はどうなるでしょうか?

<?php
$foo = 1;
$bar = $foo;
$foo = 2;
print($foo);
print("<br>");
print($bar);
リスト3 phplesson/chap03/overwrite.php

 実行結果は以下の通りです。

2
1

 4行目で変数$fooに別の値を代入、つまり値を上書きしています。このように変数は、値を書き換えることができます。

 ところで、変数$fooの値を上書きする前に、3行目で$barに$fooの値を代入しています。この$barの値は、$fooの値が上書きされた後もそのままです。これは、3行目で$fooの値を$barに代入するときに、値がコピーされたことを意味します。

存在しない変数

 リスト2のようなコード例で、もし書き間違ってしまい、何も格納されていない変数を表示しようとしたら、どうなるでしょうか。すなわち、次のような場合です。

<?php
$foo = 1;
print($bar);
リスト4 phplesson/chap03/undefinedVariables.php

 実行結果は以下の通りエラーとなります。

図2 リスト4の実行結果

 エラーメッセージには、「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プログラミングでは使いません。


 上述のように、コードに直接書かれているデータを「リテラル」といいます。ここまでの例で、「リテラル」としては「文字列」と「数値」が出てきました。いずれも基本的なリテラルです。次ページでは、まず「文字列リテラル」から解説しましょう。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。