PHP変数の基本 – 宣言方法から実践的な使い方まで完全解説

PHP

「PHPの変数ってどうやって作るの?」
「他の言語と何が違うの?」
「エラーが出る理由がわからない…」

PHPを学び始める人にとって、変数の使い方は最初に覚える大切な基礎です。

PHPの変数には独特なルールがあります。しかし、一度覚えてしまえばとても使いやすく、Webサイト作りに欠かせない道具になります。

スポンサーリンク

この記事でわかること

  • PHPの変数の基本的な作り方
  • データの種類(データ型)について
  • 変数が使える範囲(スコープ)
  • 文字列との組み合わせ方
  • よくあるエラーと解決方法
  • 実際のWebサイトでの使用例

PHP変数の基本的な作り方

変数の書き方

PHPの変数には、必ずドルマーク($)をつけます。これがPHPの特徴です。

基本の形:

<?php
$変数名 = 値;
?>

具体例:

<?php
$name = "山田太郎";
$age = 25;
$height = 170.5;
$isStudent = true;
?>

変数名のルール

OK な変数名:

$name          // 英字
$user_name     // アンダースコア
$userName      // キャメルケース
$age2          // 数字を含む(最初以外)
$_private      // アンダースコアで開始

NG な変数名:

$2name         // 数字で開始 (NG)
$user-name     // ハイフン (NG)
$user name     // 空白 (NG)
name           // $がない (NG)

変数の初期化(値を入れること)

PHPでは、変数を作ると同時に値を入れます。

<?php
// 正しい方法
$message = "こんにちは";
echo $message; // こんにちは

// 値を変更することも可能
$message = "さようなら";
echo $message; // さようなら
?>

注意点: 値を入れていない変数を使うとエラーになります。

<?php
echo $undefined_variable; // Warning: Undefined variable
?>

PHPで使えるデータの種類

主なデータ型

PHPは動的型付け言語です。変数の型を指定する必要がありません。

データ型説明
文字列(string)文字や文章$name = "太郎";
整数(int)小数点のない数$age = 20;
浮動小数点(float)小数点のある数$price = 199.99;
真偽値(bool)trueまたはfalse$flag = true;
配列(array)複数の値$colors = ["red", "blue"];
NULL値がない状態$empty = null;

文字列の書き方

ダブルクォーテーション(”)の場合:

<?php
$name = "太郎";
echo "こんにちは、$name さん"; // こんにちは、太郎さん
?>

シングルクォーテーション(’)の場合:

<?php
$name = "太郎";
echo 'こんにちは、$name さん'; // こんにちは、$name さん(変数が展開されない)
?>

使い分け:

  • 変数を文字列に含めたい → ダブルクォーテーション
  • 単純な文字列 → シングルクォーテーション(高速)

配列の使い方

通常の配列:

<?php
$fruits = ["りんご", "みかん", "ばなな"];
echo $fruits[0]; // りんご
echo $fruits[1]; // みかん
?>

連想配列(キーと値のペア):

<?php
$user = [
    "name" => "太郎",
    "age" => 25,
    "city" => "東京"
];
echo $user["name"]; // 太郎
echo $user["age"];  // 25
?>

型を確認する方法

<?php
$name = "太郎";
$age = 25;

// 型を調べる
var_dump($name); // string(6) "太郎"
var_dump($age);  // int(25)

// 型をチェックする
if (is_string($name)) {
    echo "文字列です";
}
if (is_int($age)) {
    echo "整数です";
}
?>

変数の有効範囲(スコープ)

ローカル変数

関数の中で作った変数は、その関数の中でしか使えません。

<?php
function greet() {
    $message = "こんにちは"; // ローカル変数
    echo $message;
}

greet(); // こんにちは
// echo $message; // エラー:関数外では使えない
?>

グローバル変数

関数の外で作った変数を、関数の中で使うときはglobalキーワードが必要です。

<?php
$siteName = "私のWebサイト"; // グローバル変数

function showHeader() {
    global $siteName; // globalキーワードが必要
    echo "<h1>$siteName</h1>";
}

showHeader(); // <h1>私のWebサイト</h1>
?>

スーパーグローバル変数

どこからでも使える特別な変数があります。

<?php
// フォームから送信されたデータ
echo $_POST['username'];

// URLのパラメータ
echo $_GET['page'];

// セッション(ログイン状態など)
session_start();
$_SESSION['user_id'] = 123;

// サーバー情報
echo $_SERVER['HTTP_HOST']; // ドメイン名
?>

主なスーパーグローバル変数:

  • $_POST: フォームデータ
  • $_GET: URLパラメータ
  • $_SESSION: セッションデータ
  • $_COOKIE: クッキーデータ
  • $_SERVER: サーバー情報
  • $_FILES: アップロードファイル

文字列と変数を組み合わせる方法

ドット(.)で結合

<?php
$firstName = "山田";
$lastName = "太郎";

// ドットで結合
$fullName = $firstName . " " . $lastName;
echo $fullName; // 山田 太郎

// 直接出力
echo "こんにちは、" . $fullName . "さん";
?>

ダブルクォーテーション内に埋め込み

<?php
$name = "太郎";
$age = 25;

// 変数を直接埋め込み
echo "私の名前は$nameで、年齢は$ageです";

// 中括弧で明確に区切る(推奨)
echo "私の名前は{$name}で、年齢は{$age}です";
?>

HTMLとの組み合わせ

<?php
$title = "私のWebサイト";
$userName = "太郎";
?>
<!DOCTYPE html>
<html>
<head>
    <title><?php echo $title; ?></title>
</head>
<body>
    <h1>ようこそ、<?php echo $userName; ?>さん</h1>
</body>
</html>

実際のWebサイトでの使用例

ユーザー情報の表示

<?php
// データベースから取得したと仮定
$user = [
    "id" => 1,
    "name" => "山田太郎",
    "email" => "yamada@example.com",
    "joined" => "2023-01-15"
];
?>

<div class="user-profile">
    <h2>ユーザープロフィール</h2>
    <p>名前: <?php echo $user['name']; ?></p>
    <p>メール: <?php echo $user['email']; ?></p>
    <p>登録日: <?php echo $user['joined']; ?></p>
</div>

フォームの処理

<?php
$message = "";

if ($_POST) {
    $name = $_POST['name'] ?? '';
    $email = $_POST['email'] ?? '';
    
    if (!empty($name) && !empty($email)) {
        $message = "こんにちは、{$name}さん!";
    } else {
        $message = "名前とメールアドレスを入力してください。";
    }
}
?>

<form method="post">
    <input type="text" name="name" placeholder="名前">
    <input type="email" name="email" placeholder="メールアドレス">
    <button type="submit">送信</button>
</form>

<?php if ($message): ?>
    <p><?php echo $message; ?></p>
<?php endif; ?>

条件分岐での活用

<?php
$hour = date('H'); // 現在の時刻(24時間形式)
$greeting = "";

if ($hour < 12) {
    $greeting = "おはようございます";
} elseif ($hour < 18) {
    $greeting = "こんにちは";
} else {
    $greeting = "こんばんは";
}

$userName = "太郎";
?>

<h1><?php echo $greeting; ?>、<?php echo $userName; ?>さん</h1>

よくあるエラーと解決方法

変数が定義されていないエラー

エラー例:

echo $undefinedVariable; // Warning: Undefined variable

解決方法:

<?php
// 方法1: isset()でチェック
if (isset($variable)) {
    echo $variable;
}

// 方法2: null合体演算子を使用
$name = $userName ?? 'ゲスト';
echo $name;

// 方法3: 事前に初期化
$counter = 0;
$counter++;
?>

文字列の中で変数が展開されない

問題:

$name = "太郎";
echo 'こんにちは、$nameさん'; // こんにちは、$nameさん

解決方法:

$name = "太郎";
echo "こんにちは、{$name}さん"; // こんにちは、太郎さん

配列の存在しないキーにアクセス

エラー例:

$user = ["name" => "太郎"];
echo $user["age"]; // Warning: Undefined array key

解決方法:

<?php
$user = ["name" => "太郎"];

// 方法1: array_key_exists()でチェック
if (array_key_exists('age', $user)) {
    echo $user['age'];
} else {
    echo '年齢は未設定です';
}

// 方法2: null合体演算子を使用
$age = $user['age'] ?? '未設定';
echo $age;
?>

グローバル変数の取得忘れ

問題:

<?php
$siteName = "私のサイト";

function showTitle() {
    echo $siteName; // 何も表示されない
}
?>

解決方法:

<?php
$siteName = "私のサイト";

function showTitle() {
    global $siteName; // globalキーワードを追加
    echo $siteName;
}

// または引数で渡す(推奨)
function showTitle($title) {
    echo $title;
}
showTitle($siteName);
?>

セキュリティを考慮した変数の使い方

ユーザー入力のサニタイズ

<?php
// ユーザーからの入力を安全に処理
$userInput = $_POST['comment'] ?? '';

// HTMLエスケープ
$safeInput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
echo $safeInput;

// より厳密なフィルタリング
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if ($email === false) {
    echo "有効なメールアドレスを入力してください";
}
?>

SQLインジェクション対策

<?php
// 危険な例(絶対にしない)
$userId = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $userId"; // NG

// 安全な例(プリペアドステートメント)
$userId = $_GET['id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]); // OK
?>

デバッグに便利な変数表示方法

変数の中身を確認

<?php
$data = [
    "name" => "太郎",
    "hobbies" => ["読書", "映画", "プログラミング"]
];

// 詳細な情報を表示
var_dump($data);

// 読みやすい形式で表示
print_r($data);

// JSONとして表示
echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>

デバッグ用の関数

<?php
function debug($variable, $name = '') {
    echo "<pre>";
    echo $name ? "$name: " : '';
    print_r($variable);
    echo "</pre>";
}

$users = ["太郎", "花子", "次郎"];
debug($users, 'ユーザー一覧');
?>

まとめ

PHPの変数は、ドルマーク($)から始まる柔軟で使いやすい仕組みです。

この記事のポイント:

  • 変数は$変数名 = 値;の形で作る
  • 動的型付けで型を意識せずに使える
  • スコープに注意してグローバル変数を扱う
  • 文字列結合はドット(.)や埋め込みで行う
  • エラー対策として事前チェックを心がける
  • セキュリティを考慮してユーザー入力を処理する

実践のコツ:

  1. 変数名は意味のわかる名前にする
  2. 未定義変数のチェックを習慣にする
  3. ユーザー入力は必ずサニタイズする
  4. デバッグツールを活用する

コメント

タイトルとURLをコピーしました