古庄親方の上級試験コラム#033 言語リファレンス クラスのオートローディング

目次

クラスのオートローディング

https://www.php.net/manual/ja/language.oop5.autoload.php

クラスのオートローディングについては、以前に「 古庄親方の上級試験コラム#018 「言語リファレンス > クラスの基礎」 」でも簡単に解説をしました。
ここでは、もう少し詳細を把握しておきましょう。

まず、 __autoload() 関数は PHP 7.2.0 で推奨されなくなり、 PHP 8.0.0 で削除されましたので、古い記述を読む時は注意しておきましょう。 今は、spl_autoload_register() 関数でオートローダをで登録します。

オートローダーとは?

classやinterfaceやtrait(以下、class等と省略)を使う場合、基本的には、includeまたはrequire(_once含む)を使って「class等が書かれているファイルを読み込んで」から使用します。
書かれているファイルを読み込まずにclass等を使おうとすると、「Fatal error: Uncaught Error: … not found」のエラーが発生します。
しかし、オートローダーが登録されている場合、エラーになる前に「登録されたオートローダー」を実行し、自動的に読み込む事を試みる事ができます。

オートローダーの登録

spl_autoload_register() 関数への登録の仕方を学びましょう。
第一引数に null を渡した場合、デフォルト実装である spl_autoload() 関数が登録されます。
この関数は「クラス名を小文字にして」「.inc および .php を拡張子につけたファイル名のファイルを」「すべてのインクルードパスから」探します。
この検索で探すインクルードパスは、get_include_path() 関数で確認ができ、set_include_path() 関数で(スプリクト実行中だけ)変える事ができます。
恒久的に変える場合は、 iniファイルで include_path の設定を変更します。
「読み込むファイルの拡張子を変更したい」場合、 spl_autoload_extensions() 関数を使って変更する事ができます。
spl_autoload_register() で登録された関数は、 spl_autoload_functions() 関数で確認をする事ができます。

オートローダーは、自分で実装する事もできます。
また、spl_autoload_call() 関数を使って意図的に動かす事や、spl_autoload_unregister() 関数で登録したオートローダーを削除する事もできます。

このコラムに関連するコードはこちらになります
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/033.php
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/test.phpc
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/033_2.php
https://github.com/php-engineer-examination/php8_column_expert/blob/main/src/033_2_include.php

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次