← Tilbage til koncepter
Composer Autoloading
Automatisk loading af PHP classes med Composer's PSR-4 autoloader
Kategori: Tools
🎯 Key Points
- ✓PSR-4 autoloading - Modern standard der mapper namespaces til directories
- ✓Classmap - Pre-computed map af alle klasser for hurtigere loading
- ✓Files autoloading - Inkluder specific files (helpers, functions) automatisk
- ✓Optimize autoloader - Generér classmap for production performance
- ✓composer dump-autoload - Regenerér autoloader efter ændringer
- ✓Namespace mapping - Definer root namespace til directory mapping i composer.json
- ✓Development vs production - Forskellige optimization strategies
- ✓Autoload-dev - Separate autoload config til development/testing
- ✓vendor/autoload.php - Single entry point der skal inkluderes
- ✓Class not found errors - Troubleshooting når autoloading fejler
💻 Kode Eksempel
<?php
// composer.json configuration
// {
// "autoload": {
// "psr-4": {
// "App\\": "src/",
// "Database\\": "database/"
// },
// "files": [
// "src/helpers.php"
// ],
// "classmap": [
// "legacy/"
// ]
// },
// "autoload-dev": {
// "psr-4": {
// "Tests\\": "tests/"
// }
// }
// }
// File: src/Models/User.php
namespace App\Models;
class User {
public function __construct(
public string $name,
public string $email
) {}
public function getDisplayName(): string {
return ucfirst($this->name);
}
}
// File: src/Services/UserService.php
namespace App\Services;
use App\Models\User;
class UserService {
private array $users = [];
public function create(string $name, string $email): User {
$user = new User($name, $email);
$this->users[] = $user;
return $user;
}
public function getAll(): array {
return $this->users;
}
}
// File: src/helpers.php (loaded automatically via files autoload)
function app_url(string $path = ''): string {
return 'https://example.com/' . ltrim($path, '/');
}
function config(string $key, mixed $default = null): mixed {
// Load configuration value
return $default;
}
// File: public/index.php
require __DIR__ . '/../vendor/autoload.php';
use App\Models\User;
use App\Services\UserService;
// No need for require statements - classes are autoloaded
$userService = new UserService();
$user = $userService->create('John Doe', 'john@example.com');
echo $user->getDisplayName() . PHP_EOL;
echo app_url('dashboard') . PHP_EOL; // Helper from files autoload
// Running: composer dump-autoload
// Regenerates the autoloader with all mappings💼 Hvornår bruges det?
- •Application bootstrapping - Inkluder vendor/autoload.php i entry point (index.php)
- •Package development - Definer PSR-4 mappings for dit package's namespace struktur
- •Legacy code integration - Brug classmap til at autoload ældre kode uden namespaces
- •Helper functions - Autoload utility functions via files directive
- •Testing setup - Brug autoload-dev til at autoload test classes og fixtures
- •Microservices - Hver service har sit eget autoload setup med separate namespaces
⭐ Best Practices
- ✓Følg PSR-4 standard strengt - ét namespace segment per directory niveau
- ✓Run 'composer dump-autoload -o' (optimize) i production for classmap generation
- ✓Placer vendor/autoload.php require som første statement i din application
- ✓Brug autoload-dev for test classes og development-only kode
- ✓Avoid mixing PSR-4 og classmap unless necessary for legacy support
- ✓Commit composer.lock til version control for reproducible builds
- ✓Run composer dump-autoload efter at tilføje nye classes eller ændre struktur
- ✓Organize kode i src/ directory og map det til dit root namespace i composer.json
ℹ️ Quick Info
Kategori
Tools
Sværhedsgrad
Begynder