Knowledge
#PHP
This fatal error means PHP could not load a class you referenced. Almost always a namespace mismatch, a wrong file name, or an autoloader that needs regenerating.
Published by Mark van Eijk on June 23, 2026 · 1 minute read
- About the error
- Why do I see this error
- Solution
- Check the namespace matches the path
- Import the class
- Regenerate the autoloader
About the error
PHP Fatal error: Uncaught Error: Class "App\Services\Invoice" not found
PHP tried to use a class and couldn't find a definition for it. With Composer's PSR-4 autoloading, the class name and namespace must map exactly to a file on disk, and any mismatch breaks that lookup.
Why do I see this error
- The namespace declared in the file doesn't match its folder.
- The file name doesn't match the class name (PSR-4 is case-sensitive, and so is Linux).
- You forgot a
usestatement, so PHP looks for the class in the current namespace. - The class is new and the autoloader hasn't been regenerated.
- A typo in the class name.
Solution
Check the namespace matches the path
Under PSR-4, App\Services\Invoice must live at app/Services/Invoice.php and declare:
namespace App\Services;
class Invoice
{
// ...
}
The file name (Invoice.php) must match the class name exactly, including case. This works on macOS (case-insensitive filesystem) and then breaks on a Linux server, a very common "works locally, 500 in production" trap.
Import the class
If the class is in another namespace, add a use statement at the top of the file:
use App\Services\Invoice;
$invoice = new Invoice();
Regenerate the autoloader
If the class genuinely exists and is named correctly, Composer's autoload map may be stale:
composer dump-autoload
For framework classes resolved through the container (controllers, etc.), the symptom is slightly different, see Target class does not exist in Laravel.