【PHP学習記録】完全初心者が1日でマスターしたPHP基礎概念8選

## はじめに

この記事で分かること：
- PHPの基本構文から関数まで、1日で学べる実用的な知識
- 実際に動かせるサンプルコード付きの解説
- 初心者が躓きやすいポイントとその対策

**想定読者**: 他言語経験ありのエンジニア・PHP学習を始めたい方  
**所要時間**: 5分で読める

## 背景・きっかけ

エンジニアとして働いている私ですが、これまでPHPに触れる機会がありませんでした。
「PHPの基本構文は他の言語とどう違うの？」「1日でどのレベルまで習得できるの？」
そんな疑問を持つ方のために、1日の学習記録をまとめました。

他の言語経験がある中でのPHP特有の書き方や、
「これは他の言語より便利！」と感じた部分も含めて、
実践的な学習体験をお伝えします。

## 1. Hello World - PHPの第一歩

### 基本的な書き方

```php
<?php
echo "Hello, PHP World!\n";
echo "PHP Version: " . phpversion() . "\n";
echo "今日からPHP学習開始！\n";
?>
```

**学んだポイント**:
- PHPコードは `<?php` で始まり `?>` で終わる
- `echo` で文字列を出力
- 文字列の連結は `.`（ドット）を使用
- `\n` で改行

### 初心者Tips
- 最初は `?>` を忘れがち → IDE（VSCode等）を使うと自動補完してくれる
- エラーが出たら、まず構文エラーをチェック

## 2. 変数とデータ型の理解

### 基本的な変数の使い方

```php
<?php
// 変数は $ マークから始める
$name = "太郎";              // 文字列 (string)
$age = 25;                   // 整数 (integer)  
$height = 175.5;             // 浮動小数点数 (float)
$isStudent = true;           // 真偽値 (boolean)
$hobby = null;               // null値

// 変数の中身を表示
echo "名前: " . $name . "\n";
echo "年齢: " . $age . "歳\n";
echo "身長: " . $height . "cm\n";

// データ型を確認
echo "\$name の型: " . gettype($name) . "\n";
?>
```

**重要な発見**:
- PHPは動的型付け言語 → 型を明示的に宣言する必要がない
- `gettype()` 関数でデータ型を確認できる
- 変数名は必ず `$` から始まる

### 躓きポイント
- `$` を忘れがち → エラーの原因No.1
- 文字列と数値の混在 → PHPは自動的に型変換してくれる（便利！）

## 3. 配列操作をマスター

### インデックス配列

```php
<?php
$fruits = ["apple", "banana", "orange", "grape"];

// 配列の要素にアクセス
echo "最初の果物: " . $fruits[0] . "\n";
echo "果物の種類数: " . count($fruits) . "\n";

// 全要素を表示
foreach ($fruits as $fruit) {
    echo "- " . $fruit . "\n";
}

// 要素を追加
$fruits[] = "mango";  // 末尾に追加
array_push($fruits, "kiwi");  // 関数を使って追加
?>
```

### 連想配列（重要！）

```php
<?php
$user = [
    "id" => 1,
    "name" => "田中太郎",
    "email" => "tanaka@example.com",
    "role" => "student"
];

echo "ユーザー名: " . $user["name"] . "\n";
echo "メール: " . $user["email"] . "\n";
?>
```

**学習のポイント**:
- 配列のインデックスは0から始まる
- 連想配列は実際の開発でよく使う → データベースから取得したデータの構造に似ている
- `foreach` は配列操作の基本

## 4. 関数で処理を再利用

### 基本的な関数

```php
<?php
// 挨拶する関数
function greet($name) {
    return "こんにちは、" . $name . "さん！";
}

// 関数の呼び出し
echo greet("shion") . "\n";
echo greet("田中太郎") . "\n";

// 計算を行う関数
function add($a, $b) {
    return $a + $b;
}

echo "10 + 5 = " . add(10, 5) . "\n";
?>
```

**関数作成のメリット**:
- コードの再利用性が高まる
- 複雑な処理を分割して管理できる
- デバッグが楽になる

### 実践的な応用例

```php
<?php
// ユーザー情報を検索する関数
function findUserById($users, $id) {
    foreach ($users as $user) {
        if ($user["id"] == $id) {
            return $user;
        }
    }
    return null;
}

// 成績の平均を計算する関数
function calculateAverage($grades) {
    $total = 0;
    foreach ($grades as $grade) {
        $total += $grade["score"];
    }
    return $total / count($grades);
}
?>
```

## 5. 文字列操作のテクニック

### 基本的な文字列操作

```php
<?php
$text = "Hello, PHP World!";

echo "文字列の長さ: " . strlen($text) . "\n";
echo "大文字に変換: " . strtoupper($text) . "\n";
echo "小文字に変換: " . strtolower($text) . "\n";

// 文字列の分割
$fruits = "apple,banana,orange";
$fruitArray = explode(",", $fruits);
print_r($fruitArray);
?>
```

**便利だった機能**:
- `explode()` で文字列を配列に分割
- `implode()` で配列を文字列に結合
- CSVデータの処理等に応用できそう

## 6. 条件分岐とループ処理

### if文とforeach文の組み合わせ

```php
<?php
$scores = [95, 88, 76, 82, 94];

foreach ($scores as $index => $score) {
    if ($score >= 90) {
        echo "科目" . ($index + 1) . ": " . $score . "点 (優秀！)\n";
    } elseif ($score >= 80) {
        echo "科目" . ($index + 1) . ": " . $score . "点 (良好)\n";
    } else {
        echo "科目" . ($index + 1) . ": " . $score . "点 (要努力)\n";
    }
}
?>
```

## 7. スコープの理解

### グローバル変数とローカル変数

```php
<?php
$globalVar = "グローバル変数";

function testScope() {
    $localVar = "ローカル変数";
    global $globalVar;  // グローバル変数にアクセス
    
    echo $globalVar . "\n";
    echo $localVar . "\n";
}

testScope();
// echo $localVar;  // エラー！関数外からアクセス不可
?>
```

**重要な概念**:
- 関数内で定義した変数は関数外から参照できない
- `global` キーワードでグローバル変数にアクセス可能
- 変数のスコープを理解することでバグを防げる

## 8. 総合システムの構築

1日の学習の集大成として、複数の管理システムを作成しました。

### 🏗️ 構築したシステム一覧

#### 1. 包括的データ管理システム（comprehensive_system.php）
- **ユーザー管理・タスク管理・成績管理の統合**
- **多次元配列でのデータ構造設計**
- **レポート生成機能**

#### 2. 分析システム（analytics_system.php）
- **ユーザー生産性統計**
- **科目別パフォーマンス分析**
- **CSVバックアップ機能**

```php
<?php
// 生産性統計の例
function getUserProductivityStats($tasks, $userId) {
    $userTasks = getTasksByUserId($tasks, $userId);
    
    $stats = [
        "total_tasks" => count($userTasks),
        "completed" => 0,
        "completion_rate" => 0
    ];
    
    foreach ($userTasks as $task) {
        if ($task["status"] == "completed") {
            $stats["completed"]++;
        }
    }
    
    if ($stats["total_tasks"] > 0) {
        $stats["completion_rate"] = ($stats["completed"] / $stats["total_tasks"]) * 100;
    }
    
    return $stats;
}
?>
```

#### 3. 検索システム（search_system.php）
- **キーワードベースのユーザー検索**
- **タスクの優先度フィルタリング**
- **期限切れタスクの抽出**

#### 4. 高機能計算機（calculator.php）
- **基本四則演算 + 高度な計算（べき乗、複利計算）**
- **計算履歴管理**
- **実用計算（BMI、消費税、円の面積）**

#### 5. 成績管理システム（grade_system.php）
- **科目別成績管理**
- **クラス平均の自動計算**
- **成績ランキング機能**

#### 6. ショッピングリスト管理（shopping_list.php）
- **カテゴリ別商品管理**
- **商品検索機能**
- **動的なリスト追加機能**

### 技術的な学習ポイント

**データ構造の設計**:
```php
// 階層的なデータ構造
$shoppingList = [
    "野菜" => ["トマト", "きゅうり", "レタス"],
    "肉類" => ["鶏肉", "豚肉", "牛肉"],
    "調味料" => ["醤油", "味噌", "塩"]
];
```

**関数の活用**:
```php
// 検索・フィルタリング関数
function filterTasksByPriority($tasks, $priority) {
    $results = [];
    foreach ($tasks as $task) {
        if ($task["priority"] == $priority) {
            $results[] = $task;
        }
    }
    return $results;
}
```

**エラーハンドリング**:
```php
function divide($a, $b) {
    if ($b == 0) {
        return "エラー: 0で割ることはできません";
    }
    return $a / $b;
}
```

## まとめ

### 1日で学習した重要ポイント

1. **変数とデータ型**: PHPの基本構文を理解
2. **配列操作**: インデックス配列と連想配列の使い分け
3. **関数作成**: 処理の再利用とコードの整理

### 次のアクション提案

- **Laravel学習の準備**: フレームワークへのステップアップ
- **データベース連携**: MySQL等との組み合わせ
- **Webアプリケーション開発**: 実際のプロジェクト作成

### おすすめ学習リソース

- [PHP公式ドキュメント](https://www.php.net/manual/ja/)
- [PHP The Right Way](https://www.phptherightway.com/)

## おわりに

他言語の経験がある中で、1日でここまでPHPの特徴を理解することができました。
最初は「なぜ$マークが必要？」「配列の書き方が独特」と感じましたが、
実際に書いてみると、PHPの柔軟性と実用性を体感できました。

**学習のコツ**:
- エラーを恐れずにとりあえず書いてみる
- 一つずつ確実に理解してから次に進む
- 実際に動くものを作って達成感を得る

これからPHPを学ぶ方の参考になれば嬉しいです！
質問やフィードバックがあれば、お気軽にコメントください。

**次回予告**: Laravel入門編をお届け予定です 🔥