PHPにおけるOOPのクラスオートローディング

あるクラスを利用するためには、 requireで接続する必要があることを すでにご存知でしょう。 プロジェクト内に非常に多くのクラスがある場合、 多くの接続が必要となり、 それらを記述するのは非常に不便で、 管理も困難になります。

この問題を解決するために、 PHPにはクラスのオートローディングが追加されました。 オートローディングにより、 PHPはコード内でそのクラスへのアクセスが試みられた際に、 クラスファイルを自動的にロードすることができます。 しかし、単純にクラスがロードされるわけではありません。 何らかのファイル名やクラスフォルダ名に関する命名規則に従って、 サイトのフォルダ内に特別な方法で配置する必要があります。 PHPに組み込まれている規則を使用するか、 独自の規則を考案して使用することができます。

まずはPHPの標準的な規則について見ていきましょう。 この規則は、クラスを含むファイルがある場合、 サイトのフォルダからそのファイルへのパスが、 ファイルの名前空間と一致しなければならず、 ファイル名はその中に格納されているクラスの名前と一致しなければならない、 というものです。 このとき、フォルダ名とファイル名は小文字でなければなりません。

例を見てみましょう。 次のようなクラスがあるとします:

/core/admin/pagecontroller.php<?php
  namespace Core\Admin;
  
  class PageController
  {
    
  }
?>

規則によれば、このクラスは フォルダ /core/admin/ 内の ファイル pagecontroller.php に配置されなければなりません。

では、index.php ファイルで、 require を通じて接続せずに オートローディングを使用して、 このクラスを利用してみましょう。 そのためには、クラスが呼び出されるファイルの先頭で、 関数 spl_autoload_register を呼び出す必要があります。 実行してみましょう:

index.php<?php
  spl_autoload_register(); // オートローディングを有効にする
  
  $obj = new Core\Admin\PageController; // 問題なくオブジェクトを作成
?>
Задание 1

index.php ファイルで クラスの自動ロードを有効にしてください。 フォルダとファイルの命名規則に従って、 クラス Core\User、 クラス Core\Admin\Controller、 クラス Project\User\Data を作成してください。 index.php ファイルで これらのクラスのオブジェクトを作成してください。