PHP 8.2 strict in 2026: why it is still our floor for SMBs
The stack choice for Suite HUB was not Node, Go, or Rust. It was PHP 8.2+ with strict_types. Here is why, without nostalgia.
Every time someone reviews Suite HUB internally, the first reaction is the same: “PHP? In 2026?”. It is understandable — the discourse on X and Hacker News does not do it many favors. But the decision was not by inertia or nostalgia. It was a calculated choice based on who our client is, where the system runs, and what lasts longer than the technical fashion of the year.
The context: $5/month hosting and cPanel
Our typical client is a Panamanian SMB paying for shared Hostinger or a modest VPS. No Kubernetes, no Vercel, no Lambda edges. cPanel is still the operational reality of most accessible hosting in Latin America.
PHP runs out-of-the-box in any of those environments without touching anything. Node needs PM2, systemd, gateway, monitoring. Go or Rust need cross-compilation and binary deployment. For a client without a DevOps team, that is friction that kills the project before it starts.
PHP 8.2 strict is not the PHP of 2010
People who see “PHP” mentally load version 5.x with mysql_query() and loose files.
But PHP 8.2 with declare(strict_types=1) gives you:
<?php declare(strict_types=1);
namespace HubCore\Modules\Pos;
final readonly class CartItem
{
public function __construct(
public string $sku,
public int $quantity,
public Money $unitPrice,
) {}
public function subtotal(): Money
{
return $this->unitPrice->multiply($this->quantity);
}
}
final readonly class, strict return types, named args, enums, match expressions,
first-class callable syntax, never return type, intersection types. Ergonomics are
at the level of modern C# or Kotlin.
Composer is real, PHPUnit is real
Hub Core gen 2 has 37 PHPUnit tests verifying 32 specific DGI rules. The PAC
adapter breaks in CI before reaching production. Composer manages the dependency tree
with composer.lock just as robust as package-lock.json or Cargo.lock.
The narrative that “PHP has no tooling” has not applied for a decade.
Frontend is not where decisions hurt
For UI we use Tailwind 3 + Flowbite + Alpine.js. Alpine is the “Swiss army knife” of declarative frontend when you do not need React. In HUB Pro we add HTMX 2 for richer server-driven interactions. This covers 95% of cases without the complexity of an SPA.
Sounds minimalist? It is the right decision when your app lives embedded in a cheap ARM tablet browser with unstable 4G connection. Every KB counts.
The day we do pivot
There are cases where PHP is not the right tool:
- Real-time intensive computation: we prefer Go or Rust as sidecar.
- Persistent WebSockets at scale: Soketi in Node runs parallel.
- AI/embedding services: Python with FastAPI lives in its own container.
PHP is the transactional heart. Specialized workers are satellites called via HTTP. That architecture distributes complexity without forcing us into a Node monolith that later no one knows how to operate.
The real advantage: finding talent
In Panama there is a huge base of PHP developers with real experience, many with WordPress / Laravel background. Recruiting to extend Suite HUB is trivial. Recruiting to extend a Rust + GraphQL + microservices stack is practically impossible locally.
That talent availability is what makes the stack economically sustainable for our scale.
Conclusion
PHP 8.2 strict is not the aspirational option or the one that earns clout on social media. It is the right option for our context: Panamanian SMBs, accessible hosting, small disciplined teams, 10-year maintainability. Technical modernity matters, but it matters more to solve the client’s problem with the tool that survives the hype.
And honestly: seeing a well-written PHP system serving 2,300+ real electronic invoices per month from a $40/month VPS, without dropping once, is an argument that rarely any nostalgia can match.
Comments
Comments via GitHub Discussions — requires GitHub login.