#17 PHPで学ぶモジュールとパッケージの基本
PHPのファイル整理は、以前の記事で触れたComposerと「名前空間」を組み合わせて行うのが現代的な方法です。この記事では、PHPにおけるファイル分割の基本を解説します。
ファイルを読み込む基本
// utils.php
function greet($name) {
echo "こんにちは、{$name}さん";
}
// main.php
require_once 'utils.php';
greet("太郎");
`require`は同じファイルを何度も読み込むとエラーになる場合があるため、実務では二重読み込みを防いでくれる`require_once`を使うのが基本です。似た機能に`include`・`include_once`もありますが、読み込みに失敗した際の扱いが異なり、`require`系は失敗すると処理を停止する一方、`include`系は警告を出しつつ処理を続行します。
namespaceという仕組み
namespace App\Utils;
function greet($name) {
echo "こんにちは、{$name}さん";
}
use App\Utils;
Utils\greet("太郎");
`namespace`は、クラス名や関数名が別のファイルの定義と衝突するのを防ぐための仕組みです。フォルダ構成に合わせて`App\Models`、`App\Controllers`のように階層的に名前空間を分けるのが一般的な設計です。
クラスにも名前空間を使う
// src/Models/User.php
namespace App\Models;
class User {
public $name;
}
// main.php
use App\Models\User;
$user = new User();
`use`を使うと、毎回フルの名前空間を書かずに短いクラス名だけで扱えるようになり、コードがすっきりします。
PHPならではの注意点
以前の記事で触れたComposerの`autoload`機能を使うと、`require`を1つずつ書かなくても、名前空間に沿ったファイルを自動的に見つけて読み込んでくれます。プロジェクトが大きくなったら、手動の`require`から、Composerによる自動読み込みへの移行を検討しましょう。Composerの`autoload`はPSR-4という標準規約に沿ってファイルパスと名前空間を対応付けており、`composer.json`の設定さえ済ませておけば、新しいクラスを追加してもコード側で読み込みの記述を追加する必要がなくなります。
まとめ
PHPのファイル整理は`require`が基本ですが、`namespace`とComposerの`autoload`を組み合わせるのが現代的な方法です。プロジェクトの規模が大きくなるほど、この仕組みの恩恵を実感しやすくなります。
本ページはプロモーションを含みます。
参考書籍(PR)
PHPをもっと学びたい方には「10日でおぼえるPHP入門教室 第4版」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿