PHP - spl_autoload_registerでオートロード

§1. 基本的な class 関数の定義と呼び出し方法

通常、クラス名の最初の文字は大文字、ファイル名は小文字にします。


<?php
class A
{
  private $foo;
  
  public function __construct($foo)
  {
    $this->foo = $foo;
  }

  public function bar()
  {
    echo __METHOD__, "\n"; // A::bar と表示されます。
    echo $this->foo;       // bar と表示されます。
  }
}

// Location: ./classes/a.class.php
?>

呼び出しの記述

<?php
require 'classes/a.class.php';
$a = new A($foo='bar');
$a->bar();
?>

§2. spl_autoload_register を使用した class のオートロード

指定した関数を __autoload() の実装として登録します(php>=5.1.2)。


<?php
function my_autoloader($class)
{
  require 'classes/'. strtolower($class). '.class.php';
}

spl_autoload_register('my_autoloader');
?>

もしくは、無名関数を使用して(PHP>=5.3.0)、


<?php
spl_autoload_register(
  function ($class)
  {
    require 'classes/'. strtolower($class). '.class.php';
  }
);
?>

呼び出しの記述

<?php
$a = new A($foo='bar');
$a->bar();
?>

§3. spl_autoload_register で複数のディレクトリを扱う

より、実践的に記述してみましょう。


<?php
spl_autoload_register(
  function ($class)
  {
    $dirs = array(
      '/classes/core',
      '/classes/libraries',
      '/classes/models'
    );

    foreach($dirs as $dir)
    {
      $file = PROJECTPATH. $dir. '/'. strtolower($class). '.class.php';
      if (file_exists($file)) require_once $file;
    }
  }
);
?>

※PROJECTPATH: classes ディレクトリまでの絶対パス。

Google Sponsored

コメント

このページに関する、ご感想やご質問をお寄せください。
お名前と都道府県名は、正確にお書きください。 - 泰山 -

お名前: *必須
都道府県: *必須
コメント: *必須

まだコメントは有りません。