Let’s hop in our time machine and compare PHP from the mid‑2000s to the rocket-fueled, type-savvy PHP we write today. And yes—we’ll finally talk about why there’s no PHP 6. Buckle up.

--------------------------------------------
2006: When “PHP 5.2” Ruled the Earth
Back in 2006, most of us were:
- Sprinkling PHP straight into HTML like parmesan.
- Wrestling with weird defaults (hello, magic quotes and register_globals).
- Using the original `mysql_*` functions and concatenating SQL like it was going out of style.
- Living without namespaces, without Composer, and without a unified set of community standards.
Code: Select all
<?php
// 2006 vibes—do NOT copy!
mysql_connect($host, $user, $pass);
mysql_select_db('app');
// Assumes quotes were "magically" escaped. Yikes.
$name = $_POST['name'];
$sql = "INSERT INTO users (name) VALUES ('" . addslashes($name) . "')";
mysql_query($sql);
echo "Saved!";
--------------------------------------------
Today: PHP All Grown Up
Modern PHP (think 8.x) is clean, predictable, and fast. It has types when you want them, rich language features, a thriving package ecosystem, and performance wins out of the box.
A modern, tidy rewrite:
Code: Select all
<?php
declare(strict_types=1);
final class UserData {
public function __construct(public string $name) {}
}
function saveUser(PDO $pdo, UserData $user): void {
$stmt = $pdo->prepare('INSERT INTO users (name) VALUES (:name)');
$stmt->execute([':name' => $user->name]);
}
$pdo = new PDO('mysql:host=localhost;dbname=app', 'user', 'pass');
saveUser($pdo, new UserData(name: 'Ada'));
echo "Saved!";
- Performance: OPcache built‑in, engine rewrites, and even a JIT for CPU‑heavy work. Your old code often runs dramatically faster just by upgrading.
- Types & language modernity: scalar/return types, union/intersection types, attributes, enums, `match`, nullsafe operator, constructor property promotion, readonly properties/classes, typed class constants, and more.
- Ecosystem: Composer standardizes dependencies and autoloading; PSRs bring interoperability (logging, HTTP messages/clients, containers, etc.).
- Safer defaults: The foot-guns of yesteryear (magic quotes, register_globals, `mysql_*`) are gone. Prepared statements and explicit coding patterns are the norm.
The Curious Case of the Missing PHP 6
Short story: there really was a PHP 6 project, focused on building Unicode into the language core. It never made it to a stable release—too big, too complex, and momentum fizzled. The name, however, lived on in talks, articles, and books.
When a real next major version was finally ready, the community chose to skip the cursed number and go straight to PHP 7. No conspiracy, just a version-number mulligan.
--------------------------------------------
A Then‑vs‑Now Cheat Sheet
- 2006 (PHP 5.2): JSON just arrived; no namespaces; `register_globals`/magic quotes still haunting projects; `mysql_*` API everywhere; performance “fine” for the time.
- Today (PHP 8.x): Types galore, enums, attributes, readonly, match, nullsafe; Composer + PSRs; OPcache; massive perf gains; legacy pitfalls removed.
Real‑World Upgrades That Feel Great
Enums + readonly data objects (clearer models, fewer bugs):
Code: Select all
<?php
enum Status: string { case Draft = 'draft'; case Published = 'published'; }
final readonly class Post {
public function __construct(
public string $title,
public Status $status = Status::Draft
) {}
}
Code: Select all
<?php
#[Attribute]
class Slugify {
public function __construct(public string $separator = '-') {}
}
final class Article {
#[Slugify('-')]
public string $title = 'Hello World';
}
Code: Select all
<?php
$code = 201;
$message = match ($code) {
200, 201 => 'OK',
400 => 'Bad Request',
404 => 'Not Found',
default => 'Unknown',
};
If You’re Coming Back to PHP…
- Target PHP 8.2 or 8.3+ for new projects. You’ll get the best blend of features and polish.
- Use Composer from minute one—autoloading, PSRs, and quality packages await.
- Embrace types, enums, attributes, and readonly for self-documenting, bug‑resistant code.
- Flip on OPcache in production (you almost certainly already have it). JIT only if your workload benefits.
- For old codebases, migrate off `mysql_*` to PDO or mysqli, and nuke any lingering magic quotes/register_globals assumptions.
Let’s Talk!
What surprised you most about modern PHP?
- The speed boost without rewriting everything
- Types, enums, and attributes (feels like a new language!)
- The Composer/PSR ecosystem (goodbye, yak-shaving)
- The fact that PHP 6 is a ghost story
— Posted on ComputerBB — Short Circuits, Big Ideas