1

適切に名前が付けられていないクラスのオートロードに問題があります。私たちの開発者は常に Java スタイルのファイル名をクラスと同じにするアプローチを使用しているため、オートロード機能は些細なことですが、HybridAuthが登場したとき、私たちは突然肝に銘じました。

記録のために、命名システムは次のようになります。

  • Hybrid_AuthHybrid/Auth.phpにあります
  • Hybrid_Provider_Adapterは *Hybrid/Provider_Adapter.php* に存在します
  • Hybrid_Providers_FacebookHybrid/Providers/Facebook.phpにあります
  • OAuthRequest は(他のいくつかと一緒に) Hybrid/ thirdparts/OAuth/OAuth.php にあります

そして、これが私たちの小さくて調和のとれたオートローダに何をしたかです:

オリジナル

function autoload($class)
{
    $search = array('classes',
                    'utils',
                    'config');

    foreach($search as $folder)
    {
            $file = ROOT_DIR.'/'.$folder.'/'.$class.'.php';

            if(file_exists($file)) 
            {
                    require_once $file;
            }
    }
}

ハイブリッド認証後

function autoload($class)
{
    // FIXME: This is horrid.

    $search = array('classes',
                    'utils',
                    'config',
                    'utils/hybridauth/Hybrid',
                    'utils/hybridauth/Hybrid/Providers',
                    'utils/hybridauth/Hybrid/thirdparty/Facebook',
                    'utils/hybridauth/Hybrid/thirdparty/LinkedIn',
                    'utils/hybridauth/Hybrid/thirdparty/OAuth',
                    'utils/hybridauth/Hybrid/thirdparty/OpenID');

    // Stupid Hybrid Auth not using good file naming schemes
    if (strstr($class, 'OAuth')) require_once ROOT_DIR.'/'.'utils/hybridauth/Hybrid/thirdparty/OAuth/OAuth.php';
    $class = str_replace('Hybrid_', '', $class);
    $class = str_replace('Providers_', '', $class);

    foreach($search as $folder)
    {
            $file = ROOT_DIR.'/'.$folder.'/'.$class.'.php';

            if(file_exists($file)) 
            {
                    require_once $file;
            }
    }
}

それはそれを熟考しました!HybridAuth のソースを変更せずに、何かをもう一度きれいにするにはどうすればよいですか?

4

0 に答える 0