1

我在自动加载未正确命名的类时遇到问题。虽然我们的开发人员总是使用 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 的源代码的情况下,我可以尝试怎样让一些东西变得更整洁?

4

0 回答 0