PHP Tutorial · Databases and Tools · Lesson 37 of 38
PHP Composer
Install packages, autoload classes and manage dependencies with Composer.
What is Composer?
Composer is PHP's package manager. It downloads libraries from Packagist and generates an autoloader so classes load automatically when you use them.
Getting started
composer init # create composer.json
composer require guzzlehttp/guzzle # add a package
composer require --dev phpunit/phpunit
composer install # install from composer.lock
Commit composer.json and composer.lock; never commit the vendor/ folder.
Autoloading your own code (PSR-4)
{
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
Run composer dump-autoload, then include one file and every class in src/ loads on demand:
<?php
require __DIR__ . "/vendor/autoload.php";
use App\Models\User; // loads src/Models/User.php automatically
$user = new User("Ada");
How autoloading works
Composer registers a function with spl_autoload_register(); PHP calls it the first time an unknown class is used:
<?php
spl_autoload_register(function (string $class) {
echo "autoloader asked for: $class\n";
// A real autoloader would require src/Models/User.php here.
if ($class === "App\\Models\\User") {
eval('namespace App\Models; class User { public function __construct(public string $name) {} }');
}
});
$user = new App\Models\User("Ada");
echo "created ", $user->name, "\n";
$again = new App\Models\User("Lin"); // already loaded: no second call
echo "created ", $again->name, "\n";
Output
autoloader asked for: App\Models\User created Ada created Lin
Test yourself
Which file should you commit so everyone installs the exact same package versions?
vendor/composer.lockautoload.php.env
Show answer
Answer: composer.lock