转到PHP5 SPL

时间:2013-12-01 14:42:42

标签: php spl

在长时间没有与PhP合作之后,我正在进入php 5领域。我现在要弄清楚的一件事是如何使用spl autoload功能。在我犯愚蠢的初学者错误之前,请你确认/建议:

据我了解,SPL_autoload并不意味着不再需要包含;我仍然需要包含我想手动使用的配置,如下所示:

require_once( “includess / php_ini_settings.php”);

在php_ini_settings.php中,我随后可以运行自动加载器,加载某个目录中的所有php文件,例如我的classes目录:

// Directory for classes
define('CLASS_DIR', 'classes/');

// Add classes dir to include path
set_include_path(CLASS_DIR);

spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();

这确实是将所有类自动加载到我的所有页面中的正确(且最有效)方法吗?

- 补充说: - 提到除非您使用不同的命名方案,否则无需指定自动加载器。我假设命名方案默认使用类名作为文件名,在非大写?

1 个答案:

答案 0 :(得分:2)

除非您使用不同的命名方案,否则您不需要spl_autoload_extensions()spl_autoload_register()部分。所以你基本上只需要将类路径添加到包含路径,就像你已经做的那样。

我建议使用http://bugs.php.net/49625中的SPL_autoload_suxx()作为__autoload()函数,但要更明智地区分大小写:

function __autoload($cn) {
    $rc = false;
    $exts = explode(',', spl_autoload_extensions());
    $sep = (substr(PHP_OS, 0, 3) == 'Win') ? ';' : ':';
    $paths = explode($sep, ini_get('include_path'));
    foreach ($paths as $path) {
        foreach ($exts as $ext) {
            $file = $path.DIRECTORY_SEPARATOR.$cn.$ext;
            if (is_readable($file)) {
                require_once $file;
                $rc = $file;
                break;
            }
        }
    }
    return $rc;
}