PHPの変数名の命名規則について

採用はこちら

PHPでコードを書くとき、必ず使うのが変数です。

変数は、値を一時的に入れておくための箱のようなものです。

たとえば、ユーザー名、商品価格、ログイン状態、記事タイトルなど、さまざまなデータを変数に入れて扱います。

PHPでは変数名を自由に付けられますが、何でも好きな名前にできるわけではありません。

文法上のルールがあります。

また、文法的には正しくても、読みにくい名前を付けてしまうと、あとからコードを修正するときに苦労します。

この記事では、PHPの変数名の基本ルールから、実務で使いやすい命名の考え方まで詳しく解説します。

目次

PHPの変数名の基本ルール

PHPの変数は、ドル記号 $ に続けて変数名を書きます。

$name = 'Taro';
$age = 25;
$isLoggedIn = true;

上記の $name$age$isLoggedIn が変数です。

PHPの変数名には、次のような基本ルールがあります。

// OK
$user
$userName
$user_name
$_count
$user1

// NG
$1user
$user-name
$user name
$user.name

まずは、この違いを押さえておきましょう。

変数名は $ から始める

PHPでは、変数を使うときに必ず $ を付けます。

$userName = 'Taro';
$productPrice = 1200;

$ を付けないと、PHPはそれを変数として認識できません。

// NG
userName = 'Taro';

ただし、厳密にいうと $ は変数名そのものではありません。

PHPで「これは変数です」と示すための記号です。

そのため、変数名の本体は $ の後ろに続く部分です。

$userName

この場合、変数名の本体は userName です。

変数名の先頭に数字は使えない

PHPの変数名は、数字から始めることができません。

// NG
$1user = 'Taro';
$2item = 'Book';
$10rank = 10;

一方で、数字を途中や末尾に使うことはできます。

// OK
$user1 = 'Taro';
$item2 = 'Book';
$rank10 = 10;

つまり、数字を使う場合は、先頭ではなく2文字目以降に使います。

// OK
$user1
$product2
$page10

// NG
$1user
$2product
$10page

初心者のうちは、変数名は英字から始めると覚えておくと安全です。

変数名に使える文字

PHPの変数名では、基本的に次の文字を使えます。

  • 英字
  • 数字
  • アンダースコア _

ただし、数字は先頭には使えません。

// OK
$user
$user_name
$userName
$user1
$_user

次のような記号やスペースは使えません。

// NG
$user-name  // ハイフンは使えない
$user name  // スペースは使えない
$user.name  // ドットは使えない
$user@name  // @は使えない

特に注意したいのが、ハイフン - です。

$user-name

これは一見すると変数名のように見えますが、PHPでは $user から name を引くような式として解釈される可能性があります。

変数名の単語を区切りたい場合は、ハイフンではなくアンダースコアを使います。

// OK
$user_name

または、キャメルケースを使います。

// OK
$userName

厳密にはマルチバイト文字が使える場合もある

PHPの変数名は、厳密には英字やアンダースコアだけでなく、128〜255のバイト値も使用できます。

そのため、UTF-8環境では次のような日本語の変数名が動作する場合があります。

$名前 = '太郎';
$価格 = 1200;

echo $名前;

ただし、実務では日本語の変数名はおすすめしません。

理由は、PHPがUnicode変数名を完全に正式サポートしているわけではなく、環境やエディタ、外部ツールとの相性でトラブルになる可能性があるためです。

また、チーム開発では英語ベースの変数名のほうが一般的です。

// 非推奨
$商品価格 = 1200;
$税込価格 = 1320;

// 推奨
$productPrice = 1200;
$priceIncludingTax = 1320;

学習用のコードでは日本語変数名を見かけることもありますが、実務では英数字とアンダースコアを使った変数名にするのが無難です。

大文字と小文字は区別される

PHPの変数名は、大文字と小文字を区別します。

たとえば、次の3つはすべて別の変数です。

$name = 'Taro';
$Name = 'Jiro';
$NAME = 'Saburo';

それぞれ別の変数として扱われるため、次のように出力結果も変わります。

echo $name; // Taro
echo $Name; // Jiro
echo $NAME; // Saburo

文法上は問題ありませんが、実務では大文字小文字だけが違う変数名を混在させるのは避けましょう。

// 避けたい例
$userName = 'Taro';
$UserName = 'Jiro';
$username = 'Saburo';

このようなコードは、読み間違いや入力ミスの原因になります。

基本的には、プロジェクト内で1つの命名ルールに統一することが大切です。

$this は特別な変数

PHPには、$this という特別な変数があります。

$this は、クラスの中で現在のオブジェクト自身を表すために使います。

class User
{
    public string $name;

    public function showName()
    {
        echo $this->name;
    }
}

この例では、$this->name によって、現在のオブジェクトが持っている name プロパティを参照しています。

$this は通常の変数とは異なり、自由に別の値を代入して使うものではありません。

// NG
$this = 'test';

オブジェクト指向のコードを書くときにはよく使うため、$this は特別な意味を持つ変数として覚えておきましょう。

予約語を変数名に使うのは避ける

PHPには、classfunctionifforeachreturn などの予約語があります。

変数には $ が付くため、次のような名前は文法上使える場合があります。

$class = 'active';
$return = true;
$function = 'show';

しかし、予約語と同じ名前を変数名にすると、読み手が混乱しやすくなります。

たとえば、$class はCSSクラスを表しているのか、PHPの class と関係があるのか、少し紛らわしくなります。

このような場合は、意味を具体的にした変数名にするのがおすすめです。

$cssClass = 'active';
$shouldReturn = true;
$functionName = 'show';

文法上使えるかどうかだけでなく、読んだ人がすぐに意味を理解できるかどうかを意識しましょう。

PHPでよく使われる命名スタイル

PHPの変数名では、主に次の2つの命名スタイルが使われます。

camelCase

camelCase は、複数の単語をつなげるときに、2語目以降の先頭を大文字にする書き方です。

$userName = 'Taro';
$productPrice = 1200;
$isLoggedIn = true;
$createdAt = '2026-05-05';

PHPのアプリケーションコードでは、camelCase が使われることが多いです。

特に、メソッド名はPSR系のコーディング規約でも camelCase が基本とされています。

public function getUserName()
{
    return $this->userName;
}

変数名については絶対に camelCase でなければならないわけではありませんが、モダンなPHPプロジェクトではよく使われます。

snake_case

snake_case は、複数の単語をアンダースコア _ でつなげる書き方です。

$user_name = 'Taro';
$product_price = 1200;
$is_logged_in = true;
$created_at = '2026-05-05';

データベースのカラム名では、snake_case がよく使われます。

user_name
created_at
updated_at
deleted_at

そのため、データベースのカラム名に合わせて、PHP側でも snake_case を使うことがあります。

$user_name = $row['user_name'];
$created_at = $row['created_at'];

ただし、PHPコード全体で camelCasesnake_case が混在すると読みにくくなる場合があります。

プロジェクト内でルールを決めて統一することが大切です。

camelCaseとsnake_caseのどちらを使うべきか

PHPの文法上は、camelCase でも snake_case でも問題ありません。

$userName = 'Taro';  // OK
$user_name = 'Taro'; // OK

重要なのは、どちらが正しいかではなく、プロジェクト内で統一されているかです。

迷った場合は、次のように分けると扱いやすいです。

対象命名例
PHPの変数名$userName
PHPのメソッド名getUserName()
DBカラム名user_name
真偽値$isLoggedIn
配列$users

たとえば、アプリケーションコードでは camelCase を使い、データベースのカラム名では snake_case を使うという方針です。

$userName = $row['user_name'];
$createdAt = $row['created_at'];

このように、PHP側とDB側で命名スタイルを分けるケースはよくあります。

実務で使いやすい変数名の付け方

ここからは、文法上のルールではなく、実務で読みやすいコードを書くための命名のコツを紹介します。

変数の中身がわかる名前にする

変数名は、その中に何が入っているかがわかる名前にしましょう。

悪い例です。

$a = 'Taro';
$b = 25;
$c = true;

このような名前では、変数の意味がわかりません。

良い例です。

$userName = 'Taro';
$userAge = 25;
$isActive = true;

変数名を見るだけで、ユーザー名、年齢、有効状態を表していることがわかります。

コードは書いている時間より、あとから読む時間のほうが長くなりがちです。

短く書くことより、意味が伝わることを優先しましょう。

短すぎる名前を避ける

短すぎる変数名は、コードが長くなるほど意味がわかりにくくなります。

$n = 'Taro';
$p = 1200;
$d = 0.1;

このような変数名では、n が名前なのか数値なのか、p が価格なのかページなのか、すぐには判断できません。

次のように具体的な名前にしましょう。

$userName = 'Taro';
$productPrice = 1200;
$discountRate = 0.1;

ただし、ループカウンタのように意味が明確な場合は、短い名前でも問題ありません。

for ($i = 0; $i < 10; $i++) {
    echo $i;
}

$i$j などは、短いループ処理では一般的に使われます。

boolean型は ishascanshould を使う

true または false が入る変数は、名前を見ただけで真偽値だとわかるようにすると読みやすくなります。

おすすめは、次のような接頭辞を使うことです。

$isLoggedIn = true;
$hasPermission = false;
$canEdit = true;
$shouldRedirect = false;

それぞれの意味は次の通りです。

変数名意味
$isLoggedInログインしているか
$hasPermission権限を持っているか
$canEdit編集できるか
$shouldRedirectリダイレクトすべきか

悪い例です。

$login = true;
$permission = false;
$edit = true;
$redirect = false;

これだと、状態を表しているのか、処理名なのか、データ名なのかが曖昧です。

boolean型では、条件文で読んだときに自然な名前にするのがポイントです。

if ($isLoggedIn) {
    echo 'ログイン済みです';
}

if ($canEdit) {
    echo '編集できます';
}

否定形の変数名はできるだけ避ける

boolean型では、否定形の変数名を使うと条件式が読みにくくなることがあります。

$isNotActive = false;

if (!$isNotActive) {
    echo '有効です';
}

このように、変数名も否定形で、条件式でも ! を使うと、二重否定のようになって意味を追いにくくなります。

できるだけ肯定形で書くのがおすすめです。

$isActive = true;

if ($isActive) {
    echo '有効です';
}

否定形の変数名を使うよりも、肯定形にして条件式で必要に応じて反転させるほうが読みやすくなります。

配列やリストは複数形にする

複数のデータが入る変数は、複数形にするとわかりやすくなります。

$users = ['Taro', 'Jiro', 'Saburo'];
$products = ['Book', 'Pen', 'Notebook'];
$articles = [];

一方、1件のデータを表す場合は単数形にします。

$user = 'Taro';
$product = 'Book';
$article = $articles[0];

foreach では、複数形と単数形を組み合わせると自然に読めます。

foreach ($users as $user) {
    echo $user;
}
foreach ($articles as $article) {
    echo $article['title'];
}

$users の中から1件ずつ $user を取り出していることが、変数名だけでわかります。

数値には単位を入れる

数値を扱う変数では、必要に応じて単位を入れるとミスを防ぎやすくなります。

$priceYen = 1200;
$durationSeconds = 60;
$fileSizeBytes = 2048;
$widthPx = 320;

単位がないと、意味が曖昧になることがあります。

$duration = 60; // 秒?分?
$width = 320;  // px?%?
$price = 1200; // 円?ドル?

処理の中で単位が重要な場合は、変数名に含めると安全です。

$durationMinutes = 30;
$durationSeconds = 1800;

このように書くと、分なのか秒なのかが明確になります。

省略しすぎない

変数名を短くしようとして、省略しすぎるのは避けましょう。

$usrNm = 'Taro';
$prdPrc = 1200;
$regDt = '2026-05-05';

このような名前は、書いた本人にはわかっても、他の人には伝わりにくいです。

次のように、意味が伝わる名前にしましょう。

$userName = 'Taro';
$productPrice = 1200;
$registeredDate = '2026-05-05';

ただし、一般的に広く使われている略語は問題ありません。

$id
$url
$html
$css
$apiResponse

重要なのは、チーム内で意味が共有されているかどうかです。

型だけを表す名前にしない

変数名は、型ではなく意味を表す名前にしましょう。

悪い例です。

$string = 'Taro';
$array = [];
$object = new User();

これでは、文字列、配列、オブジェクトであることはわかりますが、何を表すデータなのかがわかりません。

良い例です。

$userName = 'Taro';
$users = [];
$user = new User();

変数名では「どんな型か」よりも「何を表しているか」を伝えることが大切です。

意味が広すぎる名前に注意する

次のような変数名は、便利ですが使いすぎると意味が曖昧になります。

$data
$value
$item
$result
$temp

たとえば、次のコードは少しわかりにくいです。

$data = getUserData();
$result = check($data);

改善するなら、次のように具体的にします。

$userData = getUserData();
$isValidUser = validateUser($userData);

もちろん、短い処理の中で一時的に使うだけなら $value$item が適している場合もあります。

foreach ($items as $item) {
    echo $item;
}

大切なのは、変数の役割が文脈からすぐにわかるかどうかです。

よく使う変数名の例

ここでは、実務でよく使う変数名の例を紹介します。

ユーザー関連

$user
$users
$userId
$userName
$userEmail
$userPassword
$userProfile
$isLoggedIn
$hasAdminRole

商品・EC関連

$product
$products
$productId
$productName
$productPrice
$cartItems
$order
$orderId
$orderTotal
$shippingFee
$taxAmount

記事・ブログ関連

$post
$posts
$postId
$postTitle
$postContent
$publishedAt
$isPublished
$categoryName
$tagNames

フォーム関連

$requestData
$inputName
$emailAddress
$password
$confirmPassword
$errors
$errorMessage
$isValid

日付関連

$createdAt
$updatedAt
$deletedAt
$publishedAt
$expiredAt
$startDate
$endDate

日付や時刻を表す変数では、createdAtupdatedAtpublishedAt のように At を使うことが多いです。

一方、日付だけを表す場合は、startDateendDate のように Date を使うとわかりやすくなります。

良い変数名の例

次のコードは、変数名から処理の意味が比較的わかりやすい例です。

$userId = 123;
$userName = 'Taro';
$emailAddress = 'taro@example.com';
$isLoggedIn = true;
$hasPermission = false;

$products = [
    ['name' => 'Book', 'price' => 1200],
    ['name' => 'Pen', 'price' => 150],
];

$totalPrice = 0;

foreach ($products as $product) {
    $totalPrice += $product['price'];
}

if ($isLoggedIn && $hasPermission) {
    echo '管理画面にアクセスできます。';
}

$userName$emailAddress$isLoggedIn$products$totalPrice など、変数名を見るだけで何を表しているかがわかります。

悪い変数名の例

次のコードは、文法的には動作しても、意味がわかりにくい例です。

$id = 123;
$n = 'Taro';
$mail = 'taro@example.com';
$flag = true;
$check = false;

$arr = [
    ['n' => 'Book', 'p' => 1200],
    ['n' => 'Pen', 'p' => 150],
];

$t = 0;

foreach ($arr as $v) {
    $t += $v['p'];
}

if ($flag && $check) {
    echo '管理画面にアクセスできます。';
}

このコードでは、$n$flag$check$arr$t が何を意味しているのか、すぐには判断できません。

読みやすいコードにするには、変数名を具体的にすることが大切です。

PHPの変数名で迷ったときのチェックポイント

PHPの変数名を付けるときは、次の点を確認しましょう。

チェック項目
何が入っているかわかるか$userName
数字から始まっていないか$user1 はOK、$1user はNG
大文字小文字のルールが統一されているか$userName に統一
複数データなら複数形か$users
booleanなら真偽値だとわかるか$isLoggedIn
単位が必要な数値に単位があるか$widthPx
省略しすぎていないか$productPrice
予約語と紛らわしくないか$cssClass

変数名は自由に付けられますが、自由だからこそルールを決めておくことが大切です。

まとめ

PHPの変数名は、ドル記号 $ に続けて書きます。

$userName = 'Taro';

基本的なルールは次の通りです。

// OK
$userName
$user_name
$_count
$user1

// NG
$1user
$user-name
$user name
$user.name

PHPの変数名は大文字小文字を区別し、数字から始めることはできません。

単語を区切る場合は、camelCase または snake_case を使います。

実務では、文法上正しいだけでなく、読みやすく意味が伝わる名前を付けることが重要です。

$userName
$isLoggedIn
$hasPermission
$products
$totalPrice
$createdAt

変数名を見るだけで、何が入っているのか、単数なのか複数なのか、真偽値なのか、金額なのか、日付なのかがわかるようにしましょう。

PHPの命名規則で大切なのは、文法上正しいこと保守しやすいことの両方です。

特にチーム開発では、個人の好みで名前を付けるのではなく、プロジェクト全体で命名スタイルを統一することが、読みやすく修正しやすいコードにつながります。

以上、PHPの変数名の命名規則についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次