0

PHP のオートローダーと名前空間に少し混乱しています。

私のクラスは資産ファイル内に整理されています。

-- Assets
    -- user
       -- User.php
    -- database
       -- Database.php

これは単純なバージョンで、各フォルダ (つまり、ユーザー、データベース) にはさらに多くのファイルがあります。

このプロジェクトには 1 つのベンダー (つまり私) しかいないため、競合するベンダー名について心配する必要はありませんが、たとえば、PSR0 オートローダーを使用する場合:

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;
}

各クラス ファイルで名前空間を宣言し、.xml を使用してクラスを初期化する必要がありますかnew user\User();? を使用して初期化することはできませんかnew user_User;

どうもありがとう

4

1 に答える 1

1

PSR-0 オートローダー規則では、ディレクトリ構造にマップされる名前空間を使用する必要はありません。基本的に同じ目的で、クラス名にアンダースコアを使用することもできます。

\名前空間区切り記号と同様に、ロードするファイルを検索するときにクラス名のアンダースコアが変換されます。DIRECTORY_SEPARATORしたがって、クラスuser_User\user\Userは両方とも、オートローダが同じファイルを検索する結果となります: user/User.php.

于 2012-07-16T00:08:49.630 に答える