ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
PHP ファイルの基本構造
<?php
declare(strict_types=1); // 型厳密化 (推奨)
namespace App\Services;
use App\Models\User;
use App\Exceptions\NotFoundException;
class UserService
{
public function findByEmail(string $email): ?User
{
return User::where('email', $email)->first();
}
}
// ★ 終了タグ ?> は付けない (出力が紛れ込むのを防ぐ)
PHP タグの種類
| タグ | 記述 | 推奨 |
|---|---|---|
| 標準 | <?php ... ?> | ★ 標準 |
| 短縮 echo | <?= $var ?> | OK (テンプレートで多用) |
| 短縮タグ | <? ... ?> | 非推奨 (設定依存) |
| ASP 風 | <% ... %> | PHP 7 で廃止 |
| script タグ | <script language="php"> | PHP 7 で廃止 |
<!-- Blade / プレーン PHP テンプレート -->
<h1>Hello, <?= htmlspecialchars($name) ?>!</h1>
<?php foreach ($users as $user): ?>
<li><?= $user->name ?></li>
<?php endforeach; ?>
変数と命名規則
$name = "Alice"; // 変数は $ 始まり
$user_id = 1; // _ で区切る (snake_case)
$isAdmin = true; // PSR-12 は camelCase 推奨
// ❌ 数字始まりは NG
// $1abc = "x";
// 大文字小文字は区別される
$Name = "Bob";
echo $name; // "Alice"
echo $Name; // "Bob"
// 定数
const APP_VERSION = "1.0";
define("PI", 3.14);
// クラスの定数
class Status {
public const ACTIVE = 1;
public const INACTIVE = 0;
}
Status::ACTIVE;
関数名は大文字小文字を区別しないのが歴史的仕様。クラス名・名前空間は区別する。
function greet() { return "hello"; }
greet(); // OK
Greet(); // OK (関数名は鈍感)
GREET(); // OK
class User { ... }
// USER のような呼び出しは NG (クラス名は敏感)
文字列リテラル: クォートの違い
| 種類 | 変数展開 | エスケープ | 速度 |
|---|---|---|---|
シングル '...' | × | \\ \' のみ | ★ わずかに速い |
ダブル "..." | ○ ($var 展開) | \n \t \\ \$ \" | 遅い |
Heredoc <<<TAG | ○ (ダブル相当) | 不要 | 同じ |
Nowdoc <<<'TAG' | × | 不要 | 同じ |
$name = "Alice";
echo 'Hello, $name'; // Hello, $name (展開されない)
echo "Hello, $name"; // Hello, Alice
echo "Hello, {$name}!"; // Hello, Alice! (中括弧で範囲明示)
// 配列要素・オブジェクトプロパティ
echo "{$user['name']}"; // 配列
echo "{$user->name}"; // オブジェクト
// Heredoc (ダブル相当)
$msg = <<<EOT
Hello, $name!
今日は良い天気ですね。
EOT;
// Nowdoc (シングル相当、展開なし)
$tpl = <<<'EOT'
$name は展開されません
\n もそのまま
EOT;
コメント
// 一行コメント (C/Java スタイル)
# 一行コメント (Perl スタイル)
/*
複数行
コメント
*/
/**
* ★ PHPDoc コメント (IDE が型情報として解釈)
*
* @param string $name ユーザー名
* @param int $age 年齢
* @return User
* @throws InvalidArgumentException
*/
function createUser(string $name, int $age): User { ... }
declare(strict_types=1)
PHP 7+ の型厳密モード。ファイルの先頭で宣言すると、関数の引数・戻り値の型変換が許されなくなります。
<?php
declare(strict_types=1); // ★ ファイル先頭でのみ有効
function add(int $a, int $b): int {
return $a + $b;
}
add(1, 2); // 3
add("1", 2); // ❌ TypeError (strict なしなら 3 になる)
add(1.5, 2); // ❌ TypeError
// strict_types=0 (デフォルト) は自動変換される
PSR-12 コーディング規約 (主要ルール)
- インデントはスペース 4 つ (タブ禁止)
- 改行はLF のみ (Windows の CRLF NG)
- ファイル末尾は空行 1 つで終わる
- クラス・関数の
{は改行して次行に置く - 制御構文の
{は同じ行 - 名前空間 / use 文 の後に空行
- クラス名 PascalCase, メソッド・変数 camelCase, 定数 SNAKE_UPPER
- PHP 終了タグ
?>はPHP のみのファイルでは付けない
<?php
declare(strict_types=1);
namespace App\Services;
use App\Models\User;
use App\Repositories\UserRepository;
class UserService
{
public function __construct(
private readonly UserRepository $repo,
) {}
public function findActiveUsers(int $limit = 10): array
{
if ($limit <= 0) {
throw new \InvalidArgumentException('limit must be positive');
}
return $this->repo->findActive($limit);
}
}
制御構文
// if / elseif / else
if ($x > 10) {
echo "big";
} elseif ($x > 0) {
echo "small";
} else {
echo "zero or negative";
}
// 代替構文 (テンプレートで便利)
if ($x > 10): echo "big"; elseif ($x > 0): echo "small"; else: echo "zero"; endif;
// switch
switch ($status) {
case 'active':
echo "active";
break;
case 'pending':
case 'review':
echo "in progress";
break;
default:
echo "?";
}
// match 式 (PHP 8+)
$label = match (true) {
$score >= 90 => 'A',
$score >= 80 => 'B',
$score >= 70 => 'C',
default => 'F',
};
// ループ
for ($i = 0; $i < 10; $i++) { ... }
foreach ($users as $user) { ... }
foreach ($users as $i => $user) { ... }
while ($cond) { ... }
do { ... } while ($cond);
PHP 8.x の主な新機能
| バージョン | 機能 |
|---|---|
| 8.0 | 名前付き引数、コンストラクタプロパティ昇格、union 型、match 式、nullsafe ?->、JIT |
| 8.1 | enum、readonly プロパティ、never 戻り値、Fiber、配列アンパック with string キー |
| 8.2 | readonly クラス、disjunctive normal form 型、null/false/true 型 |
| 8.3 | typed class constants、#[\Override] アノテーション |
| 8.4 | property hooks、asymmetric visibility、new MyClass()->method() (新インスタンスの即時メソッド呼び) |
// 名前付き引数 (PHP 8.0+)
createUser(name: 'Alice', age: 25, isAdmin: true);
// コンストラクタプロパティ昇格 (PHP 8.0+)
class Point {
public function __construct(
public readonly float $x,
public readonly float $y,
) {}
}
// enum (PHP 8.1+)
enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
public function label(): string {
return match($this) {
Status::Active => '有効',
Status::Inactive => '無効',
};
}
}
// nullsafe (PHP 8.0+)
$country = $user?->address?->country?->name;
FAQ
Q: ?> は必要?
A: PHP のみのファイルでは付けないのがベストプラクティス。末尾に余計な改行や空白が混じると HTTP ヘッダ送信前に出力されてしまうため。
Q: シングルとダブル、どちらを使う?
A: 変数展開しないならシングルが原則。"hello" と 'hello' の性能差はマイクロ最適化レベルですが、明確に意図が伝わるのでシングル推奨。
Q: declare(strict_types=1) は必須?
A: 新規プロジェクトでは付けるべき。型変換による潜在バグを防げます。既存コードへ後付けすると影響大なので段階的に。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?