1) С точки стандартов программирования, насколько правильно указывать у каждого класса namespace?
да, это правильно. Один файл, один класс, который должен лежать в определенном пространстве имен.
2) Какой подход для использования spl_autoload_register из двух перечисленных является более правильным?
Второй. Ибо это стандарт. "
Вызывать несколько раз, в качестве аргумента указав функции, подключающие классы из разных директорий" - это когда у тебя мешанина из кода и ты пытаешься всё это натянуть на современные реалии.
Сейчас дефакто композер стандарт, не изобретай велосипед, не стоит заморачиваться на то, что само по себе практически не используется (spl_autoload_register) в проектах.
1. Возьми композер (у меня под виндой
phar работает, если запускать через php), инициализируй его у себя в проекте:
php ../composer.phar init
2. Создай в корне директорию в app с именем Test - это будет пространство имен App\Test, туда положи файл Test.php, в котором объяви класс Test с указанием пространства имен namespace App\Test;
3. В файле composer.json допиши:
{
.....
"autoload": {
"psr-4": {
"App\\": ["app/"]
}
}
}
где app - будет весь код твоего приложения, те твоих чудо-классов.
Запусти
php ../composer.phar dump-autoload
3. Подключи лишь одну строку:
require('./vendor/autoload.php');
в файл индекса или в те файлы, где нужны классы с автоподгрузкой.
4. Должно получиться это: