2.

PHP 文法の基礎完全ガイド — 変数・配列・関数・クラス・PHP 8 新機能

編集
この記事の要点
  • PHP コードは で囲む。 終了タグ ?> は省略推奨(純粋な PHP ファイルでは出力混入防止)
  • 変数は $ プレフィックス。 配列は 添字配列 [1, 2, 3]連想配列 ["key" => "value"] の区別なし
  • 関数定義は function、 クラスは class、 namespace は namespace App\Http;
  • PHP 8 新機能: match 式、 named arguments、 readonly プロパティ、 type declarations、 attributes
  • 依存読み込みは require_once / include。 モダンには Composer の autoload (vendor/autoload.php) で完結

PHP の基本構造

基本データ型

備考
int4232/64bit プラットフォーム依存
float3.14倍精度浮動小数点
string"hello"シングル/ダブル/Heredoc/Nowdoc
booltrue / false小文字推奨
array[1, 2]添字/連想を区別しない
objectnew User()クラスのインスタンス
nullnull値なし
callableクロージャ・関数名コールバック
iterable配列 or Iteratorforeach 可能なもの

配列(添字・連想)

// 添字配列
$fruits = ["apple", "banana", "cherry"];
echo $fruits[0];               // apple
$fruits[] = "orange";          // 末尾追加
count($fruits);                // 4

// 連想配列
$user = [
    "name" => "Taro",
    "age" => 30,
    "email" => "taro@example.com",
];
echo $user["name"];

// PHP 7.4+ スプレッド展開
$a = [1, 2, 3];
$b = [0, ...$a, 4];            // [0, 1, 2, 3, 4]

// foreach
foreach ($fruits as $fruit) {
    echo $fruit;
}

foreach ($user as $key => $value) {
    echo "$key = $value\n";
}

// 主要な配列関数
array_map(fn($x) => $x * 2, [1, 2, 3]);   // [2, 4, 6]
array_filter([1, 2, 3, 4], fn($x) => $x % 2 === 0);  // [2, 4]
array_reduce([1, 2, 3], fn($carry, $x) => $carry + $x, 0);  // 6
in_array("apple", $fruits);    // true
array_keys($user);             // ["name", "age", "email"]

文字列

// シングル: 変数展開なし、 \n もそのまま
$s1 = 'Hello\n$name';          // 文字列 "Hello\n$name"

// ダブル: 変数展開あり、 エスケープ有効
$s2 = "Hello\n$name";          // 変数展開 + 改行

// Heredoc (ダブル相当)
$s3 = <<

制御フロー

// if / elseif / else
if ($score >= 90) {
    $grade = "A";
} elseif ($score >= 80) {
    $grade = "B";
} else {
    $grade = "C";
}

// 三項演算子
$msg = $age >= 18 ? "成人" : "未成年";

// Null 合体 (PHP 7+)
$name = $_GET["name"] ?? "ゲスト";

// Null 合体代入 (PHP 7.4+)
$config["debug"] ??= false;

// switch
switch ($code) {
    case 200: $msg = "OK"; break;
    case 404: $msg = "Not Found"; break;
    default:  $msg = "Unknown";
}

// match 式 (PHP 8.0+) — 厳密比較、 値を返す
$msg = match($code) {
    200, 201 => "OK",
    404      => "Not Found",
    500      => "Server Error",
    default  => "Unknown",
};

// for / while / foreach
for ($i = 0; $i < 10; $i++) { ... }
while ($n < 100) { ... }
foreach ($items as $key => $val) { ... }

関数

// 基本(型宣言推奨、 PHP 7+)
function add(int $a, int $b): int {
    return $a + $b;
}

// デフォルト引数
function greet(string $name, string $msg = "Hello"): string {
    return "$msg, $name!";
}

// Named arguments (PHP 8.0+)
greet(name: "Taro", msg: "Hi");

// 可変長引数
function total(int ...$nums): int {
    return array_sum($nums);
}
total(1, 2, 3, 4);             // 10

// アロー関数 (PHP 7.4+)
$double = fn(int $x) => $x * 2;
$double(5);                    // 10

// クロージャ (use で外部変数キャプチャ)
$prefix = "User: ";
$tag = function(string $name) use ($prefix) {
    return $prefix . $name;
};

クラスと名前空間

name}";
    }

    public static function create(string $name): self {
        return new self($name);
    }
}

// 継承・インターフェース
interface Greeter {
    public function greet(): string;
}

abstract class Animal {
    abstract public function bark(): string;
}

class Dog extends Animal implements Greeter {
    public function bark(): string { return "ワン"; }
    public function greet(): string { return $this->bark(); }
}

名前空間と Composer autoload

PHP 8 の主要な新機能

機能バージョン
Named arguments8.0htmlspecialchars($s, double_encode: false)
Constructor promotion8.0__construct(public string $name)
match 式8.0match($x) { 1 => ..., default => ... }
Nullsafe operator8.0$user?->profile?->name
Enums8.1enum Status { case Active; case Inactive; }
readonly プロパティ8.1public readonly int $id;
First-class callable syntax8.1$fn = strlen(...);
readonly classes8.2readonly class Point { ... }

FAQ

Q: ?> 終了タグを書く / 書かない?
A: 純粋な PHP ファイルでは 書かない。 後ろの空白文字が headers already sent エラーの原因になります。

Q: requirerequire_once の違い?
A: _once 付きは多重読込防止。 ライブラリ読込は _once 推奨。 ただし autoload で完結するのがモダン。

Q: PHP 7 と 8 で書き方変える?
A: PHP 7.4 までサポート切れ済。 PHP 8.1+ を前提に readonly / enum / match を活用しましょう。

編集
Post Share
子ページ
  1. 基本事項
  2. HTMLへの埋め込み
  3. 変数
  4. 可変変数
  5. 定数
  6. データ型
  7. キャスト
  8. エスケープ文字
  9. 配列
  10. 演算子
  11. 代入の際の注意点
  12. 条件分岐
  13. 繰り返し処理
  14. クラスとインスタンス
  15. コンストラクタ
  16. 関数
  17. スーパーグローバル変数
  18. スコープ
  19. staticについて
  20. yieldについて
  21. ファイルのアップロード方法
  22. DB接続方法
  23. SQL実行方法
  24. カプセル化の具体例
  25. 継承の構文
  26. オーバーライド
  27. ポリモーフィズム(多様性)の具体例
  28. 抽象クラス・メソッドの構文と具体例
  29. GET通信
  30. try catchで全てのエラーを拾う方法
同階層のページ
  1. インストール方法
  2. 文法
  3. Composerのインストール
  4. 内部関数
  5. フレームワーク
  6. エラー一覧
  7. 改行出力
  8. printとechoの違い
  9. シングルクォートとダブルクォートの違い
  10. returnとyieldの違い
  11. var_dumpをログ出力
  12. CSV読み込み
  13. 待機・処理の遅延
  14. ログファイルにエラーを出力する方法
  15. エラーログ出力関数
  16. URLパラメータの配列化
  17. empty, is_null. issetの判定比較表
  18. httpステータスコードの付与
  19. バージョンの確認
  20. php.ini
  21. APIを呼び出す方法
  22. 外部ファイルを呼び出す方法
  23. カンマ区切りの文字列を配列に変換
  24. 配列からランダムに値を取り出す方法
  25. Webスクレイピング