Skip to content
Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
125 lines (103 sloc) 5.3 KB

このページはPSR-0 Autoloading Standardを日本語訳したものです。
原文:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

オートローディング規格

廃止予定 - 2014年10月21日現在、PSR-0は廃止予定となりました、 代わりに現在はPSR-4が推奨されいています。

次にオートローダーの相互運用性を保つために守らなければならない必須要件について説明します。

必須要件

  • 完全修飾名前空間とクラス名は次の構造を持たなければなりません。\<Vendor Name>\(<Namespace>\)*<Class Name>
  • どの名前空間もトップレベルに「ベンダー名」を持たなければなりません。
  • どの名前空間も好きな数だけサブ名前空間を持つことが出来ます。
  • 名前空間の区切り文字はファイルシステムからロードする際にDIRECTORY_SEPARATOR(ディレクトリの区切り文字)に変換されます。
  • クラス名に含まれる_(アンダースコア)は、DIRECTORY_SEPARATORに変換されます。名前空間に含まれる_は特別な意味を持ちません。
  • 完全修飾名前空間とクラス名はファイルシステムからロードする際に.phpが最後に付け加えられます。
  • ベンダー名・名前空間・クラス名は、大文字・小文字の組み合わせのアルファベットが使用できます。

  • \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
  • \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
  • \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
  • \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php

名前空間とクラス名のアンダースコアの例

  • \namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
  • \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php

ここで定めた規格は、オートローダーの相互運用性を実現する最も簡単な方法になるはずです。 下記にPHP5.3クラスがロードできる、この規格に準拠したクラスローダーの実装サンプルを紹介します。

実装例

下記は、上記で提案した規格のオートロード方法を示した簡単なデモ関数です。

<?php

function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}
spl_autoload_register('autoload');

SplClassLoaderの実装

次のgistはこのオートローディング規格に準拠したクラスがロードできるクラスローダー(SplClassLoader)の実装例です。 規格に準拠するPHP5.3のクラスをロードする現時点での推奨方法です。

You can’t perform that action at this time.