適切に名前が付けられていないクラスのオートロードに問題があります。私たちの開発者は常に Java スタイルのファイル名をクラスと同じにするアプローチを使用しているため、オートロード機能は些細なことですが、HybridAuthが登場したとき、私たちは突然肝に銘じました。
記録のために、命名システムは次のようになります。
- Hybrid_AuthはHybrid/Auth.phpにあります
- Hybrid_Provider_Adapterは *Hybrid/Provider_Adapter.php* に存在します
- Hybrid_Providers_FacebookはHybrid/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 のソースを変更せずに、何かをもう一度きれいにするにはどうすればよいですか?