Skip to content
PRS India

PHP 8.4 · Laravel · Symfony · Composer

PHP Development

Modern PHP is a strictly typed, JIT-compiled language, and the fastest way we know to a correct business system. We do PHP development on Laravel and Symfony. The code is typed, checked by tools, run through queues, and easy to read for whoever takes it over.

Last updated

  • PHP 8.4 with JIT, strict types and PHPStan in CI
  • Laravel or Symfony — chosen for the problem, not by habit
  • Queue-based jobs that survive a sale day
  • Old PHP updated route by route, never one big rewrite
PHP Development
Why PHP

The language that quietly runs the web.

PHP has a bad image, but its record says the opposite. It is the server-side language behind roughly three quarters of the sites whose backend we can identify. Modern PHP (8.4, strictly typed, JIT-compiled, Composer-managed) is a really good tool, and online arguments about it are out of date. We choose PHP when the system handles many transactions and the business rules are complicated: orders, payments, inventory, approvals, matching accounts, reports, an admin panel. Laravel and Symfony have a proven answer for nearly every problem such a system meets. It is usually the same answer the next PHP engineer would pick. That is what keeps the code alive after the team that wrote it has moved on.

Talk to a PHP engineer
~75
Of the known server side

PHP's share of sites whose server-side language can be identified, from public W3Techs data. This is not a claim about our clients. It is a fact about the web.

<45
p95 on the request path

Our target for an API that mostly waits on the database and network, on PHP 8.4 with OPcache and JIT. We measure it live, not in a lab test.

Level 8
PHPStan in CI

Strict code checking from the first commit. An untyped property or a hidden error fails the build, not just a review.

85%+
Coverage on core paths

Pest or PHPUnit tests that use the real database, not fake parts that agree with themselves.

How we actually build it

The PHP people argue about on the internet stopped existing around 2015. Modern PHP (8.3 and 8.4) is a strictly typed, JIT-compiled language with enums, readonly properties, first-class callable syntax, fibers and an ecosystem held together by Composer and the PSR standards. We have built more systems that earn money on it than on any other server-side stack. The reason is simple: a careful team builds a correct, tested business application in PHP that is easy to maintain, faster than in almost anything else. And the engineer who takes it over in three years understands what they are looking at.

Laravel or Symfony is a real decision, not a default

Most of our PHP development is Laravel. For a product with many transactions (orders, payments, inventory, approvals, reporting, an admin panel), its all-in-one answer to every problem is usually the one the next PHP engineer would have picked anyway. That is what lets the code outlive the team that wrote it. We pick Symfony when the system needs clearly planned structure over habit: a large system with many separate areas, a long-lived platform where the framework should stay out of the business model, or a team that already uses Symfony parts. Both are excellent. Picking the wrong one for the problem is the mistake we are most often asked to undo, so we decide in week one and write down why.

Types and static analysis, not "PHP is loose"

Every project we start runs PHPStan or Psalm at a high level from the first commit, with strict types declared, real return types everywhere, and type notes on collections. The old complaint that PHP lets anything through is a complaint about careless PHP. A modern codebase with code checking in CI catches the same kind of error a compiler would, before it reaches a review, let alone live use. An untyped property or a hidden error is a review failure, not a matter of taste.

Queues and workers are where the application actually lives

Anything that talks to a system we do not control goes onto a queue. This includes payment webhooks, GST filings, carrier APIs, invoice PDFs, e-way bills and sending notifications to many people. Jobs are idempotent (safe to run twice), because a queue will deliver a job twice one day, and that day should pass without trouble. They retry with waiting time between tries and end up in a dead-letter store with the full data and a screen where an operator can run them again. This one habit is the biggest difference between a PHP application that survives its first sale day and one that breaks during it.

Legacy PHP is a rescue, rarely a rewrite

Half the PHP work that reaches us is a system on PHP 5.6 or 7.x, with raw mysql_* calls, no framework, no tests, and business rules mixed into HTML. The urge to rewrite it from scratch is almost always wrong and almost always costly. We first add tests that record how the running code behaves, move it to a supported PHP version and Composer autoloading, then replace it route by route with a modern Laravel or Symfony codebase that keeps shipping all the way. The business keeps trading while the base is replaced underneath it.

The honest part

When PHP is the right call — and when it is not.

  Choose PHP Choose something else
Transactional business system Yes, by a wide margin. Laravel or Symfony has a proven answer for orders, payments, inventory, approvals and reporting. There is little we would suggest over it for this kind of problem at this budget.
100k concurrent WebSocket connections No. Even with an app server, this is not where PHP is strongest. Node.js or Go for the socket part. Keep PHP for the business rules behind it and let them talk through Redis.
Heavy CPU-bound ML or data crunching No. You would fight the language and lose to tools that already exist elsewhere. Python, run as a separate service that PHP calls through a queue. A plain, reliable way to do it.
Need an admin panel in a week Laravel with Filament: ready-made screens over your models, real permissions, and a record of changes. Days, not sprints. Few ecosystems match this. PHP at its most productive.
Team is JavaScript-only and will stay so Consider it anyway, as learning takes about two weeks, but do not force it. NestJS on Node is the closest thing to Laravel's order and discipline in that world.
Ageing PHP app everyone wants to bin Yes. Update it route by route while it keeps trading. This is usually far cheaper than the rewrite you were quoted. Rebuild from scratch only when the audit proves the code cannot be saved.
What we build

PHP work we take on.

Six kinds of work cover nearly everything we are asked to do in PHP.

ERP & internal platforms

Inventory, buying, approvals, GST-ready invoicing and the reports your finance team no longer has to export to Excel. Usually Laravel, with Filament for the back office.

APIs for mobile & partners

Versioned REST APIs with Sanctum or Passport, rate limits, idempotency keys and OpenAPI docs made from the source code, not written by hand.

Symfony domain platforms

Large systems with clearly separate business areas, where planned structure and a framework that stays out of your business model pay off.

Legacy PHP rescue

PHP 5.6 or 7.x, no framework, no tests. We add tests that record how it behaves and replace it step by step with modern Laravel or Symfony while it keeps running.

Performance & queue work

Finding slow spots, removing N+1 queries, fixing database indexes, then separate worker pools and an app server. Usually cheaper than the rewrite you were quoted.

Commerce & workflow backends

Pricing engines, order and delivery steps, subscription and rental rules that will never fit into somebody else's data model.

Characteristics

What modern PHP gets you, with the caveats.

The things a buyer judging PHP really wants to know, answered plainly.

  • Fast request path with OPcache & JIT

    Code is cached and busy code is JIT-compiled. Most of our PHP APIs stay under 45ms at p95 once the queries are tidy. The queries are always what matters most.

  • Type safety a compiler would recognise

    Strict types, real return types, and PHPStan or Psalm at a high level in CI catch the errors people think PHP lets through. Careless PHP is the problem, not PHP.

  • Queues that survive a bad day

    Idempotent jobs, longer waits between retries, a dead-letter store and a re-run screen an operator can use without a developer or a terminal.

  • A deep, affordable hiring pool

    There are many PHP and Laravel engineers in India at fair prices. So you can staff the system in-house later without a rescue job or a bidding war.

  • Runs on modest hardware

    One container that keeps no data inside, behind a load balancer, with Redis for cache and sessions. Most systems we run cost between ₹8,000 and ₹40,000 a month to host.

  • Reversible deploys

    Releases with no downtime behind a health check, database changes that can always be undone, and one-command rollback. The question is never whether a release fails but how fast you undo it.

Modernisation path

From ageing PHP to a codebase you can hire against.

The single most common thing we are asked to do with PHP. The steps are deliberately plain.

  1. 01

    Audit and pin the behaviour

    Weeks 1–2

    We read the code, run it on our machines, map the data model, and write tests that record how the code works around the paths that carry money. You cannot safely change what you cannot describe, so we describe it first.

  2. 02

    Lift onto a supported PHP

    Weeks 2–4

    Off old PHP that is no longer supported and onto 8.3 or 8.4, with Composer autoloading, a list of everything the app depends on, and the security holes that have been open for years closed. The app works the same way, but the ground under it is now solid.

  3. 03

    Introduce the framework at the edges

    Weeks 4–8

    A modern Laravel or Symfony application sits around the old one and takes the new routes. Old and new run side by side behind one front door. There is no big switch-over day and no stop on delivery.

  4. 04

    Strangle route by route

    Ongoing

    Each sprint moves one part of the features into the modern code with tests, and retires the matching old path. You see progress every two weeks, and you can stop at any point with a working system.

  5. 05

    Harden and hand over

    Final 2 weeks

    Code checking and a test suite in CI, monitoring set up, releases that can be undone, and a note on how it is built plus a training session so your team owns it. Or we stay on a retainer.

The stack

What ships with a PHP build from us.

These are our strong first choices. We will happily swap them for something you already run, but they are what we pick when the choice is ours.

PHP 8.4
Laravel 12
Symfony 7
Composer

Slow or ageing PHP app? Bring it to us before you approve the rewrite.

Most PHP systems we are asked to rebuild do not need rebuilding. They need the queries fixed, outside services moved onto queues and the framework added at the edges. A senior engineer replies within one business day with the scope, the risk and a price.

FAQ

The questions you were going to ask on the call.

Yes, and the doubt is almost always about PHP as it was ten years ago. PHP 8.4 is strictly typed, JIT-compiled and has good tools, and Laravel and Symfony are among the most productive full-stack frameworks in any language. The real question is never "is PHP serious", it is "what does this system do". For a business application with many transactions (orders, payments, inventory, workflow, reporting, an admin), PHP will go live sooner and cheaper than a custom Node or Go stack, and stay easy to read for whoever takes it over. For a system holding a hundred thousand live socket connections, we would pick something else and tell you so.

By the shape of the business problem. Laravel suits a product where common habits and an all-in-one toolkit get you live fast. Most business software with many transactions fits here, and the code stays familiar to the next Laravel engineer. Symfony suits a system that needs clearly planned structure: many separate business areas, a long-lived platform where the framework should stay out of the business model, or a team already using Symfony parts. We decide in week one and write down the trade-off. Neither choice locks you out of the wider PHP world, since both use Composer and the PSR standards.

Almost always, and a full rewrite is usually the wrong choice. It is costly, risky, and stops delivery for months. We add tests that record how the running system behaves, move it to a supported PHP version and Composer autoloading, then replace it route by route with a modern Laravel or Symfony codebase. The application keeps trading the whole time. A rewrite is only right when the existing code cannot be saved, and we will show you the upkeep costs before we suggest it.

It handles the size most businesses really have. PHP 8.4 with OPcache and JIT is fast on each request, and we run PHP systems handling millions of requests a day. They use containers that keep no data inside, behind a load balancer, Redis for cache and sessions, a read copy of the database for reports, and separate workers so a pile of PDF jobs cannot slow checkout. For very high load we add an application server like FrankenPHP or RoadRunner that keeps the app loaded and skips the start-up work on each request. In practice the limit is almost never PHP. It is the database, and it would have been the database in any language.

Strict types and PHPStan or Psalm at a high level in CI from the first commit, so a whole kind of error is caught before review. Pest or PHPUnit tests that use the HTTP layer and the real database, and not fake parts that always agree. Database changes that can be undone, PSR coding standards checked automatically, and dependencies kept up to date and not frozen until an upgrade becomes a crisis. A healthy PHP codebase is one where a new engineer can safely ship a change in their first week, and that is what we aim for.

A focused internal tool or workflow system is typically 8 to 12 weeks from around ₹8,50,000. A full platform, with many user roles, payments, connections to other systems, a real admin and an API for a mobile client, takes 16 to 28 weeks and starts around ₹22,00,000. Updating an old system is scoped after a paid audit, because the price depends on how much of the old system can be saved. What moves every estimate is connections to other systems: each outside system you do not control is a risk that can add time, which is exactly what discovery is there to price.

Let's talk php development

Bring us the hard version of the problem.

A senior engineer reads every enquiry. You'll get a real answer — scope, risk and a number — within one business day.