プログラム言語のキホンである変数、条件判定とループ:PHPではどう表すのか?

2015年2月9日(月)
野田 貴子

はじめに

これから始めるPHP入門コラムでは、PHPを学ぶ人が、PHPで簡単なプログラムを書けるようになるまでに必要な知識とポイントをTips的に書いていきます。今後PHPのスキルを身につけて仕事に役立てたい、という方のために「PHP技術者認定初級試験」の出題範囲を意識しながら進めていきますので、ぜひ最後までお付き合いください。

今回のあらすじ

  1. 変数
  2. 判定
  3. 繰り返し文

変数とは

前回までの連載でも使っていましたが、「変数」とは中に文字や数値などの値を入れておくことができるものです。名前に「数」という文字が入っていますが、数字以外だけでなく、文字列や関数など様々なものを入れられます。

$helloという変数の中に "こんにちは" という文字列を入れておけば、下の2つのechoは同じ結果を出力します。

echo "こんにちは";
echo $hello;

変数を使えば、変数の中身を入れ替えるだけでプログラムの挙動を変更できます。プログラミングにはなくてはならない機能ですね。

変数名の決め方

PHPの変数には、以下のルールがあります。

  • 先頭にドル記号($)を付ける
  • 変数名の1文字目は、アンダースコア記号(_)と半角英字(A-Za-z)が使える
  • 変数名の2文字目以降は、アンダースコア記号と半角英字、半角数字(0-9)が使える
  • 英字の大文字と小文字は区別される
PHPでの変数名のルール

図1:PHPでの変数名のルール

つまり、以下のような変数名はすべて有効です。

$myname
$my_name
$myName
$MyName
$_my_name

またこれらの変数は、すべて別々の変数として扱われます。ですが、$myname、$myName、$MyNameはとても紛らわしいので、同時に使わないようにしましょう。どの形式の変数を使うかは、プログラムを書く人の好みや、プロジェクトチームのコーディングルールなどによって決まります。次に示すのは、一般的な変数の命名法の例です。

表1:代表的な変数名の付け方

変数名(呼称)説明利点欠点
$myname全部小文字でつなげるシンプル長い名前になると読みにくい
$my_name
(スネークケース)
全部小文字で、単語の間にアンダースコアを入れる読みやすいアンダースコアがある分変数名が長くなる
$myName
((ローワー)キャメルケース)
2単語目以降を大文字で始める普及している大文字にするのを忘れると違う変数になってしまう
$MyName
((アッパー)キャメルケース)
全ての単語を大文字で始める…あるかな?「クラス名を大文字で始める」という慣習と紛らわしい
$_my_name先頭にアンダースコアをつける。ローカル変数(その場だけで使う変数)に使うことが多い

変数名の先頭に中に入れる値の種類を付けると、プログラムを書く人にとっての手助けになるかもしれません。後半で述べますが、PHPでは文字の「0」と数値の「0」が正反対の意味になることがあるので、このように変数名で分かるようにしておく手法もあります。

$sMyName = “Whoami”; // string(文字列)
$iMyAge = 15; // integer(数値)
$tMyBirthDay = mktime(0, 0, 0, 1, 2, 2000); // timestamp(タイムスタンプ)

また、どこから入力された値なのか、分かるようにしておくのもよいでしょう。プログラミングでは、プログラムが直接設定した値以外(例えばデータベースから取得した値、ユーザーが入力した値、外部のAPIから取得した値)は「全て」リスクがあります。悪意のある改変がされているかもしれないですし、悪意はなくても入力が間違っているかもしれないからです。これらの区別を分かりやすくしておくと、バグの発見に役立つことがあります。

表2:値の由来が分かるようにした変数名の例

$inLoginIdユーザーが入力したログインID
$okLoginId$inLoginId の中身をチェックした後に小文字に変換したもの。データベースの保存などに使っても安全なもの
$dbUserNameデータベースから取得したユーザー名
$outUserName$dbUserName をHTML出力用に直したもの

変数への代入

変数に値を入れる(「代入」と言います)には、「代入演算子(=)」を使います。数学の等号記号とは使い方が少し違うので、注意してくださいね。

構文(書き方のルール)
変数 = 中に入れたい値;

<?php
// 月収は20万円
$monthly = 200000;
?>

代入する文の右辺には、式や関数を使うこともできます。

<?php
// 年収は月収の16倍(ボーナスは4ヶ月分♪)
$yearly = $monthly * 16;
?>

変数に値を加減乗除(四則演算)する場合は、省略した書き方もあります。以下の例では、それぞれ (a) と (b) は同じ処理をします。(b)が省略した書き方です。

<?php
// 体重を2kg増やす
$weight = $weight + 2; // (a)
$weight += 2; // (b)
?>

<?php
// 利子を2倍にする
$interest = $interest * 2; // (a)
$interest *= 2; // (b)
?>

<?php
// 小遣いを半分にする
$money = $money / 2; // (a)
$money /= 2; // (b)
?>

値を1増やす(「インクリメント」と言います)ときは、「加算子(++)」を使うこともできます。以下の(a)~(d)の4つの例は、どれを選んでも、結果が同じになります。

<?php
$count = $count + 1; // (a)
$count += 1; // (b)
$count++; // (c)
++$count; // (d)
?>

加算子は変数の前にも後ろにも置けます。加算子を単体で使うときは両者に違いはありませんが、式や関数の中で使うときは挙動が違うので注意してください。「++」を前に付ける(d)とインクリメントが先に行われ、後ろに付ける(c)と変数の値が参照された後にインクリメントされます。以下の2つの例で、その違いが分かるでしょう。

<?php
$count = 100;
echo ++$count; // 101(1増やしてから値を返すため)
echo $count; // 101
?>

<?php
$count = 100;
echo $count++; // 100(値を返してから1増やすため)
echo $count; // 101
?>

同様に、変数の値を1減らす(「デクリメント」)ときは「減算子(--)」が使えます。

文字列の場合

文字列も同様に、右辺で連結式を使うことができます。

<?php
$hello = "こんにちは";
$title = $hello . "、みなさん!";
echo $title; // こんにちは、みなさん!
?>

次の2つは、どちらを選んでも同じ処理をします。

<?php
$title = $title . "ようこそ!"; // (a)
$title .= "ようこそ!"; // (b)
?>

文字列の中のにある変数

ダブルクォーテーション(”)で文字列を囲んでいる場合は、囲んだ中で変数の中身を参照できます。

<?php
$weight = 50;
echo "体重は$weightキロです。"; // 体重は50キロです。
?>

変数と文字列の区切りを明確にしたいときには、波カッコ({})で変数を囲います。

<?php
echo "体重は$weightkgです。"; // 体重はです。($weightkgという変数がないので、何も表示されない)
echo "体重は{$weight}kgです。"; // 体重は50kgです。
?>

1983年生まれ。大学卒業後、ソフトウェア開発の営業を経て、ソフトウェア開発業務に転向。現在は自社パッケージのフロントエンド開発のほか、PHPでの受託開発案件、日→英のローカライズ案件などを担当。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています