🐘

PSR-0 オートローディング標準(日本語訳)

2024/01/02に公開

オートローディング標準

非推奨 - 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

我々がここに設定する標準は、痛みのないオートローダーの相互運用性のための最低限の共通の基準であるべきです。これらの標準に従っていることをテストすることができるように、このサンプルのSplClassLoader実装を利用することができます。この実装はPHP 5.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の実装のサンプルです。これは、現在の推奨されるPHP 5.3クラスのロード方法です。

GitHubで編集を提案

Discussion