Namespaces & Autoloading
⏱ 18 min read read
What are Namespaces?
Namespaces prevent class name conflicts when combining code from
different libraries. They are like packages in Java.
// File: src/Models/User.php
namespace App\Models;
class User {
public function \_\_construct(public string $name) {}
}
Using Namespaced Classes:
// Option 1: Full qualified name
$user = new \App\Models\User('Alice');
// Option 2: use statement (preferred)
use App\Models\User;
$user = new User('Alice');
// Option 3: Alias
use App\Models\User as UserModel;
$user = new UserModel('Alice');
// Multiple use statements
use App\Models\{User, Product, Order};
Composer --- PHP's Package Manager:
Composer is to PHP what pip is to Python or npm is to Node.js.
# Install a package
composer require vendor/package
# Install dev dependency
composer require --dev phpunit/phpunit
# Install all dependencies from composer.json
composer install
# Autoload classes (put in every PHP file)
require_once 'vendor/autoload.php';
PSR-4 Autoloading maps namespace prefixes to directories.
With Composer autoloading, you never need require/include for your
own classes.
Composer creates vendor/autoload.php --- always require this file
once at the top.
Popular packages: guzzlehttp/guzzle (HTTP), monolog/monolog
(logging),
vlucas/phpdotenv (.env files), league/flysystem (filesystem).
composer.json Structure:
{
"name": "myapp/myapp",
"require": {
"php": ">=8.1",
"guzzlehttp/guzzle": "^7.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Namespaces prevent class name conflicts when combining code from
different libraries. They are like packages in Java.
// File: src/Models/User.php
namespace App\Models;
class User {
public function \_\_construct(public string $name) {}
}
Using Namespaced Classes:
// Option 1: Full qualified name
$user = new \App\Models\User('Alice');
// Option 2: use statement (preferred)
use App\Models\User;
$user = new User('Alice');
// Option 3: Alias
use App\Models\User as UserModel;
$user = new UserModel('Alice');
// Multiple use statements
use App\Models\{User, Product, Order};
Composer --- PHP's Package Manager:
Composer is to PHP what pip is to Python or npm is to Node.js.
# Install a package
composer require vendor/package
# Install dev dependency
composer require --dev phpunit/phpunit
# Install all dependencies from composer.json
composer install
# Autoload classes (put in every PHP file)
require_once 'vendor/autoload.php';
PSR-4 Autoloading maps namespace prefixes to directories.
With Composer autoloading, you never need require/include for your
own classes.
Composer creates vendor/autoload.php --- always require this file
once at the top.
Popular packages: guzzlehttp/guzzle (HTTP), monolog/monolog
(logging),
vlucas/phpdotenv (.env files), league/flysystem (filesystem).
composer.json Structure:
{
"name": "myapp/myapp",
"require": {
"php": ">=8.1",
"guzzlehttp/guzzle": "^7.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Log in to track your progress and earn badges as you complete lessons.
Log In to Track Progress