Переход на PHP5 SPL

После того, как я долгое время не работал с PhP, я перехожу на территорию php 5. Одна из вещей, которую я сейчас пытаюсь понять, это как использовать функциональность автозагрузки spl. И прежде чем я сделаю глупые ошибки новичков, не могли бы вы подтвердить/посоветовать:

Насколько я понимаю, SPL_autoload не означает, что больше нет необходимости в включениях; Мне все равно нужно будет включить конфигурацию, которую я хочу использовать вручную, например:

require_once("includess/php_ini_settings.php");

В php_ini_settings.php я впоследствии могу запустить автозагрузчик, чтобы загрузить все файлы php в определенный каталог, например, в каталог моих классов:

// 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();

Действительно ли это правильный (и наиболее эффективный) способ автоматической загрузки классов на все мои страницы?

-- добавлено: -- Упоминается, что если вы не используете другую схему именования, нет необходимости указывать автозагрузчик. Я предполагаю, что схема именования по умолчанию использует имя класса в качестве имени файла без заглавных букв?


person Jelle Ferwerda    schedule 01.12.2013    source источник
comment
Как будто были тысячи статей на эту тему, доступных с помощью простого поиска в Google.   -  person Mark    schedule 01.12.2013
comment
Спасибо за комментарий RainFromHeaven. Как будто я не читал несколько десятков из них, и ни в одном из них на самом деле не было подробного описания того, как автозагрузчик знает, где искать классы или как он инициируется.   -  person Jelle Ferwerda    schedule 01.12.2013


Ответы (1)


Вам действительно не нужны части spl_autoload_extensions() и spl_autoload_register(), если только вы не используете другую схему именования. Таким образом, вам просто нужно добавить путь к классу в путь включения, как вы уже это делали.

Я предлагаю использовать SPL_autoload_suxx() из http://bugs.php.net/49625 в качестве функции __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;
}
person DanMan    schedule 01.12.2013