What we use PHP for
Almost everything that makes a decision on a server is written in PHP here. That covers plugins for Shopware 6, extensions for TYPO3, themes and add-ons for WordPress, and standalone applications with no ready-made system underneath. What these have in common is rarely the front end. It is the logic behind it: price calculation, permissions, approvals, imports, exports and everything that has to run unwatched overnight.
The second large block is interfaces. ERP, PIM, CRM, carriers, payment providers — each of these systems speaks its own format, and in between sits PHP code that fetches data, checks it, rewrites it and passes it on. Such pipelines run for years, so traceability counts for more than elegance: errors have to become visible, a repeated run must not produce duplicate orders, and an outage on the other side must not destroy anything.
How we work with PHP
We write PHP 8 with strict types, typed properties, enums and attributes — the tools that arrived with PHP 7.0 (strict types), 7.4 (typed properties), 8.0 (attributes) and 8.1 (enums). Composer manages the dependencies, the structure follows the PSR standards so that someone else's code feels like your own. Static analysis with PHPStan runs in the pipeline, tests are written with PHPUnit, and for the cases nobody can guess there is Xdebug.
Development happens in Docker environments that match production — same PHP version, same extensions, same database. That saves the discussion about why something works locally. We plan version jumps early: every PHP release has a fixed end to its security support, and a shop on an expired version is not a technical detail but a risk. Nonsense implemented cleanly is still nonsense, which is why the subject matter comes before the code.
Limits and alternatives
PHP is not the right choice for everything. For data analysis, image processing and anything heading towards machine learning we use Python, because that is where the libraries are. In the browser it is JavaScript anyway, usually TypeScript. For connections that stay open — chat, live updates, many simultaneous clients — Node.js is the calmer route. PHP can do it, but it goes against the grain.
The second point concerns the reputation of the language. “PHP is not a serious language” is a verdict on PHP 5 that has been passed along for years without anyone looking again. Types, enums, attributes and a runtime many times faster since PHP 7 have removed the basis for that sentence. The reverse still holds: bad PHP code remains entirely possible — it is just not the language's fault.