skillup

技術ブログ

PHP

PHPのオートローディング

投稿日:2016年5月20日 更新日:

大規模開発では扱うファイルが増えるため、必要なクラスの読み込みが煩雑になるケースが多いです。

従来のPHPのファイルのロード

以前のPHPではファイルを読み込むときにrequireやincludeなどでファイルを読み込むことが一般的でした。

これらの方法ですと、大規模な開発になった時に、下記のようなデメリットが発生します。

  1. 不要なファイルまで読み込んでしまう
  2. 読み込むファイルが膨大になると読み込みのメソッドをたくさん書かねばならず大変(require_onceだらけになります。)

ここら辺JavaだとIDEが自動生成してくれるのですが、PHPの場合、そうもいかず1つ1つ地道に書いていかないといけません。

オートローディングとは

オートローディングとはクラスが必要になったときに、自動でファイルを読み込む仕組みのことです。クラスに属していない関数や定数はオートローディングすることができません。

オートローディングを利用すると、下記のときにはじめて対象のクラスの読み込みを開始します。

  • インスタンスを生成するとき
  • クラスの定数や静的メソッドを使用するとき

オートローディングを使用すると読み込みの処理をいちいち書かなくていいため、コードが大変すっきりします。

最近のPHPのライブラリはComposerで管理しているものが多いですが、オートローディングを使用してライブラリの読み込みを行っています。

サンプルソース

実際にオートローディングを使う場合は、spl_autoload_registerというメソッドを使います。

最小構成でかくと下記のようになります。
まず、オートローダーの処理自体を書くクラス(例:require_class.php)

次にオートローダーの処理を書いたクラスを読み込むファイル(例index.php)

になります。上記は必要最小限のソースですので、もう少し正しいサンプルを見たい方は下記を参考に。

http://qiita.com/misogi@github/items/8d02f2eac9a91b4e6215
PHPのオートロード
PHPでクラスをspl_autoload_registerを使ってオートロードする

メモ

  • 継承関係がある場合は、親も自動的に読み込んでくれます。
  • 実際にはクラス名(現在は名前空間があるものが多いはず)からファイルパスをパースする処理(マッピングする必要あり?)が必要です。
  • 読み込むメソッド(上記だとautoload_classes)がオブジェクト内のメソッドだったときはspl_autoload_register(array(‘クラス名’,’メソッド名’))になります。

超基本的なソース(リフレクションも含みます)

https://github.com/umanari145/phptips

-PHP
-

執筆者:


  1. […] ※useは対象のクラスに名前空間を付ける処理ですがrequireではないので合わせてrequireをするようにしましょう。一般的にはautoloaderを使う方法がメジャーです。autoloaderについてはこちら […]

PHPの名前空間 – skillup へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

apacheで複数インスタンスの起動

前回のphpenvがらみの引き続きですが、php5.6と7を共存させ、なおかつWEBアプリで動かす方法を調べたところapacheの複数インスタンスがであれば可能だとのこと。 早速調べなんとかできました …

no image

Queueの登録と実際の処理に関して

実務でQueueに絡んだ処理をする機会があったのでメモ。 Contents1 Queueとは2 Laravelでのキュー処理2.1 キューを記録しておく場所2.2 処理を登録する場面(当然まだ処理は行 …

no image

phpdocument

今回はphpのdocument生成ツールについて。 Contents1 phpdocument1.1 インストール1.2 使い方1.3 参考リンク phpdocument https://www.ph …

no image

switch(true)イディオム

switch文は通常、文字や数字で分岐をさせることが多いですが、実は条件式を入れることも可能です。 私の場合、正規表現を動的に変えたいケースがあり、検索したところ似たケースがありました。 【JavaS …

no image

Shift_JISの5C問題について 全角ハイフンでエスケープ

エンジニアであればだれもが頭を悩ませる文字コード。 私も初期のころはこれのせいでデータが入らないとかおかしくなるなんてことがさんざんありました。 今でも文字コードに遭遇することはあるんですが大体のパタ …

アーカイブ