PHP 変数
PHP において、バリアブル(変数)はデータを格納する場所を示すシンボリックな名称です。これらは「ラベルの貼られた箱」のようなものだとイメージしてください。その中には、スクリプト全体で操作したり参照したりできる情報が入っています。
データタイプの宣言を強制する他のプログラミング言語とは異なり、PHP のバリアブルは明示的にタイプを指定する必要がありません。タイプは代入されたデータによって自動的に決定されます。PHP では、すべてのバリアブルは必ずドル記号($)から始まります。
1. PHP バリアブルの宣言
PHP でバリアブルをデリクレア(宣言)するには、主に 2 つのステップがあります。ドル記号から始まる名前を決め、そこに値をアサイン(代入)することです。最初に値を代入した時点で、PHP はそのバリアブルを自動的に作成します。
<?php
$name = "Alice"; // "Alice" というストリング(文字列)を $name に代入して宣言
$age = 30; // 30 というインテジャー(整数)を $age に代入して宣言
$price = 19.99; // 19.99 というフロート(浮動小数点数)を $price に代入して宣言
$isActive = true; // true というブーリアン(布爾値)を $isActive に代入して宣言
?>バリアブルは初期値なしで宣言することも可能ですが、明示的に代入されるまでは技術的に NULL 値を保持します。値を代入する前にアクセスしようとすると、PHP は「Undefined variable(未定義の変数)」という NOTICE レベルのエラーをスローします。
<?php
$city; // $city を宣言。代入前は暗黙的に NULL を保持
$country = "USA"; // すぐに $country に値を代入
$zipCode = null; // 明示的に $zipCode に NULL を代入
echo $city; // 何も出力されず、NOTICE: Undefined variable $city が発生
echo $country; // 出力:USA
echo $zipCode; // NULL は表示されないため、何も出力されない
?>ベストプラクティス: バリアブルを宣言する際に、デフォルト値や初期値を割り当てる習慣をつけましょう。これにより「未定義の変数」エラーを防ぎ、コードが期待通りに動作することを保証できます。
2. PHP バリアブルの命名ルール
PHP には厳格な命名ルールがあります。これらに従うことで、コードの正当性と可読性を確保できます。
2.1 ドル記号 ($) から始めること
すべての PHP バリアブルはドル記号から始まらなければなりません。これにより PHP パーサーは、それらを定数や予約済みキーワード(リザーブドキーワード)などの他の要素と区別できます。
<?php
$validVariable = "こんにちは"; // 有効
// myVariable = "無効"; // 文法エラー(Syntax Error)。$ が欠落
?>2.2 最初の文字の制限
ドル記号の直後の最初の文字は、アルファベット(a-z, A-Z)またはアンダースコア(_)である必要があります。数字から始めることはできません。
<?php
$firstName = "John"; // 有効
$_lastName = "Doe"; // 有効
// $1stAttempt = "失敗"; // 無効 - $ の直後に数字は不可
?>2.3 使用可能な文字
最初の文字以降は、アルファベット(a-z, A-Z)、数字(0-9)、アンダースコア(_)を含めることができます。スペース、ハイフン、ドット、その他の特殊記号(!, @, # など)は使用できません。
<?php
$total_amount = 150.75; // 有効
$user_id_99 = 10; // 有効
// $user-name = "Jane"; // 無効 - ハイフンが含まれている
// $user Name = "Bob"; // 無効 - スペースが含まれている
?>2.4 ケースセンシティブ(大文字・小文字の区別)
PHP のバリアブル名はケースセンシティブです。つまり、$name と $Name はシステム上で全く別のバリアブルとして扱われます。
<?php
$score = 100;
$Score = 200;
echo $score; // 出力:100
echo $Score; // 出力:200
?>この仕様は、管理を誤るとバグの原因になりやすいため、一貫した命名規約を守ることが非常に重要です。
2.5 予約済みキーワードの回避
バリアブル名に PHP の予約済みキーワード(例:if, else, while, for, class, function など)を使用することはできません。これらを使用しようとすると文法エラーが発生します。
3. 命名のベストプラクティス(業界標準)
ルールを守ることは「合法」なコードを書くことですが、ベストプラクティスを守ることは「プロフェッショナル」で可読性の高いコードを書くことにつながります。
3.1 意味のある名前(記述的な名称)
バリアブルの用途や格納されているデータの内容が明確にわかる名前を選びましょう。
- 良い例:
$customerName,$totalPrice,$isLoggedIn - 悪い例:
$cn,$tp,$il(文脈が極めて明白な場合を除き、避けるべきです)
3.2 キャメルケース (camelCase)
複数の単語を組み合わせる場合、最初の単語を小文字にし、続く各単語の最初の文字を大文字にするキャメルケースは、現代の PHP 開発で最も広く採用されている規約です。
<?php
$firstName = "Alice";
$productQuantity = 5;
$orderConfirmationNumber = "XYZ789";
?>3.3 スネークケース (snake_case)
もう一つの一般的な規約は、単語の間をアンダースコアで繋ぐスネークケースです。現代の PHP のバリアブル命名ではキャメルケースほど一般的ではありませんが、古いプロジェクトやデータベースのカラム名に合わせる場合によく使われます。
<?php
$first_name = "Bob";
$product_quantity = 10;
?>重要なのは一貫性です。 プロジェクトごとに一つの規約を選び、それを最後まで貫き通しましょう。
3.4 1文字のバリアブルを避ける
ループカウンター($i, $j など)として非常に狭いスコープで使用する場合を除き、1文字のバリアブル名は説明不足であり、意味を理解するのが困難です。
3.5 ブーリアン型へのプレフィックス
多くのデベロッパーは、ブーリアン(真偽値)バリアブルの前に is, has, can などのプレフィックスを付ける習慣があります。これにより、その値が状態を表していることが明確になります。
<?php
$isActive = true; // アクティブかどうか
$hasPermission = false; // 権限を持っているか
$canEdit = true; // 編集可能か
?>4. 総合実践ケース
具体的なシナリオを通じて、これらのコンセプトをどのように適用するか見ていきましょう。
4.1 ケース 1:ユーザー情報の保存
オンライン登録システムを開発していると仮定し、ユーザーの情報を保存します。
<?php
// ユーザーのパーソナル詳細情報
$userName = "john.doe"; // ユーザーの一意なユーザー名
$userEmail = "[email protected]"; // ユーザーのメールアドレス
$userAge = 28; // ユーザーの年齢
$isPremiumUser = true; // プレミアム権限を保持しているかを示すフラグ
// 保存された情報の表示
echo "ようこそ、" . $userName . "さん!<br>";
echo "あなたのメールアドレスは:" . $userEmail . " です。<br>";
echo "現在、" . $userAge . " 歳です。<br>";
if ($isPremiumUser) {
echo "あなたはプレミアム会員権限を持っています。<br>";
} else {
echo "あなたは一般アクセス権限を持っています。<br>";
}
?>この例のポイント:
$userNameと$userEmailは記述的で、キャメルケースを使用しています。$userAgeには数値データが格納されています。$isPremiumUserはブーリアン状態であることを明確に示しています。- すべてのバリアブルは宣言時に初期値が割り当てられています。
4.2 ケース 2:商品の最終価格の計算
Eコマースにおいて、商品の最終的な決済価格を計算するロジックです。
<?php
$productName = "スマートウォッチ"; // 商品名
$basePrice = 199.99; // 商品の初期ベース価格
$taxRate = 0.08; // 8% の税率 (0.08 = 8/100)
$discountPercentage = 0.15; // 15% の割引 (0.15 = 15/100)
// 割引額の計算
$discountAmount = $basePrice * $discountPercentage;
// 割引後の価格を計算
$priceAfterDiscount = $basePrice - $discountAmount;
// 消費税額の計算
$taxAmount = $priceAfterDiscount * $taxRate;
// 最終合計金額の計算
$finalPrice = $priceAfterDiscount + $taxAmount;
echo "商品名:" . $productName . "<br>";
echo "ベース価格:$" . $basePrice . "<br>";
echo "割引額:$" . round($discountAmount, 2) . "<br>"; // 小数点第2位で四捨五入
echo "割引後価格:$" . round($priceAfterDiscount, 2) . "<br>";
echo "消費税 (" . ($taxRate * 100) . "%):$" . round($taxAmount, 2) . "<br>";
echo "最終価格:$" . round($finalPrice, 2) . "<br>";
?>ここでは、すべてのバリアブルが宣言・代入され、その後の計算ロジックで活用されています。それぞれのバリアブル名が、その具体的な用途を正確に反映しています。