PHPの名前空間とクラス名のエイリアス、オートロード:Web業界で働くためのPHP入門(終)(1/3 ページ)
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。最終回は、クラスの論理的な入れ物である名前空間とクラスを自動的に読み込むオートロードを解説します。
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載「Web業界で働くためのPHP入門」。今回は、いよいよ最終回です。クラスの論理的な入れ物である名前空間とクラスを自動的に読み込むオートロードを解説します。
PHPの名前空間
「名前空間」とは、クラスの論理的な入れ物です。JavaやC#などは古くから名前空間をサポートしていますが、PHPではバージョンが5.3になってから導入されました(Javaの場合はパッケージと呼ばれます)。そのため、5.3以前から存在する多くのライブラリなどでは名前空間を導入していません。では、名前空間というのはどういった機能でしょうか。その名前空間が必要な理由から話を始めましょう。
同名クラスは複数読み込めない
例えば、以下のような2ファイルがあるとします。
<?php class OrderAdmin { public function __construct() { print("businesses/OrderAdminがnewされました<br>"); } }
<?php class OrderAdmin { public function __construct() { print("consumers/OrderAdminがnewされました<br>"); } }
これら2ファイルは、それぞれB2B向けの注文管理クラスとB2C向けの注文管理クラスを表しているとします。注文対象が違うとしても、同じ注文管理なので、クラス名が同じ「OrderAdmin」であり、それに伴ってファイル名も同じOrderAdmin.phpです。ただし、そのファイルが存在するパスが違います。
なお、中の処理は何でも構いません。ここではコンストラクタのみを記述しています。
この状態で、以下のphpファイルを実行したとします。これは、B2B向けの注文管理クラスとB2C向けの注文管理クラスを同時に使いたいケースを想定しています。
<?php require_once("classes/businesses/OrderAdmin.php"); // (1) require_once("classes/consumers/OrderAdmin.php"); // (2) $orderAdmin = new OrderAdmin(); // (3)
実行結果は以下のようにエラーとなります。
Fatal error: Cannot declare class OrderAdmin, because the name is already in use in C:\xampp\htdocs\phplesson\chap20\classes\consumers\OrderAdmin.php on line 2
これは、どういったエラーなのでしょうか。
リスト3は(1)と(2)でリスト1とリスト2の2ファイルを読み込んでいます。先に説明したように、これら2ファイルは、パスと処理内容は異なりますが、クラス名は同じです。PHPでは、同じクラス名のクラスを複数読み込んだ場合、どのクラスを採用したらいいのか分からなくなるため、エラーとなります。エラー文面もそのことを表しています。
なお、このエラーはクラスファイルを読み込んだ時点で発生するので、リスト3の(3)の行がなくてもエラーとなることには留意しておいてください。
名前空間の登場
このように、中の処理は違うが同じ名前のクラスを1つの実行phpファイルで使いたいケースはあり得ます。これが使う以前の読み込み段階でエラーとなるのは困るので、回避する必要があります。
このエラーを回避する方法として、まず思い付くのはクラス名を、例えば、BusinessOrderAdminとConsumerOrderAdminのように、全て別のものにすることです。こちらは有効ですが、クラス数が多くなると限界があります。
そこで、登場するのが「名前空間」です。これは、ファイルパスとは別に、クラスそのものを入れておく論理的な入れ物のことです。例えるなら、クラスが存在する部屋です。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- WordPress活用に欠かせない、PHPをWindowsにダウンロードしてインストール、アンインストールする
本連載では、さまざまなソフトウェアのインストール、実行するためのセットアップ設定、実行確認、アンインストールの手順を解説する。今回は、PHPとは何か、PHPで動くツールの紹介、PHPのインストールとアンインストールについて解説。PHPプログラミングを始める参考にしてほしい。 - PHPにおけるクラスの書き方と呼び出し方――インスタンス、メソッド、プロパティ
「PHPで、どのようにオブジェクト指向プログラミングをしていくか」を解説する連載。初回は、「クラス」の書き方と簡単な使い方、メソッド/クラス定義内関数、プロパティ/クラス定義内変数、マルチプルインスタンスについて紹介します。 - PHP(スクリプト言語)
PHPは、HTMLへの埋め込みが可能なスクリプト言語(およびその処理系)。主としてWebアプリ開発に使用される。