![]() |
CMSimple_XH
|
以下、オートローダー連携のための要件を説明します。
\<ベンダー名>\(<名前空間>\)*<クラス名>
\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
ここでは余計な混乱を防ぐための最低限のオートローダー連携基準を示します。 下記のPHP 5.3上におけるSplClassLoader実装例により、これらの基準を確認することができます。
以下は、上記基準に従ったクラスのオートロードにおける振る舞いを確認するための例です。
<?php
function autoload($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strripos($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;
}
以下のgistで、上記のオートローダー互換運用を満たした上で実装クラスがロードされるというSplClassLoaderの簡単な実装例を示します。 基準を満たしたうえで、PHP 5.3クラスをロードするための推奨方法となります。