PHP · Laravel · Symfony · WordPress · API's
PHP developer
25 jaar PHP · Backend, API's en legacy modernisering
PHP is niet hip — maar het draait wel onder een groot deel van de Nederlandse webshops, portalen en bedrijfsapplicaties. Ik help je het stabiel houden, moderniseren of van nul opbouwen. Laravel, Symfony, WordPress of plain PHP — wat past, zonder dogmatisme over frameworks.
- 25 jr
- PHP ervaring
- PHP 8.3
- Modern stack
- Legacy
- Stap-voor-stap
- API's
- REST + GraphQL
De waarde van een goede developer
PHP is volwassen — een goede PHP-developer ziet je écht vooruit helpen
Het verschil tussen 'het werkt' en 'het werkt over 5 jaar nog steeds en is in een uur uit te breiden' zit in fundamenten: testdekking, types, dependency injection, schone migraties, monitoring en een ontwerp dat groei aankan. Daar zit waar een ervaren PHP-developer écht waarde toevoegt.
Backends die je over 5 jaar nog snapt
Strict types, dependency injection, clean architecture, schone naming. Geen 600-regel-controllers, geen God-objecten, geen gokwerk over wat een methode doet.
Datamodellen die mee-schalen
Schema-ontwerp dat groei aankan, indexen op de juiste plekken, migraties die teruggedraaid kunnen worden. Database is niet 'iets wat erbij komt' — het is het fundament.
Performance op productie-schaal
Query-optimalisatie, caching-strategie (Redis, OPcache, query-cache), N+1 wegwerken, profilering met XHProf of Tideways. Server-load omlaag, response-tijden onder controle.
Security die je dossier dekt
Input-validatie, prepared statements, CSRF, XSS, secret-management, dependency-audits, AVG-proof logging. Geen lekken, geen verrassingen bij een pentest.
Legacy moderniseren zonder big-bang
Strangler-pattern: stukje voor stukje vervangen, eerst tests om de oude code, dan refactor, dan vervangen. De business blijft draaien terwijl de code beter wordt.
CI/CD die teams sneller maakt
Pipelines met PHPStan, Psalm, Rector, PHPUnit, Pest, end-to-end tests, staging-deploys en rollback. Releases worden routine, niet een evenement.
Twijfel je waar het in jouw situatie misgaat? Ik denk graag mee — gewoon Maarten zelf.
Hoe het eruit ziet
Hoe een PHP-traject er praktisch uitziet
Van schone code en API-design tot performance-winst en CI/CD — hieronder een paar visualisaties van wat een PHP-traject concreet oplevert.
Strict, getest, voorspelbaar
PHPStan lvl 9Laravel 11 · PHP 8.3 · Pest tests
final readonly class CreateOrder
{
public function __construct(
private OrderRepository $orders,
private StockService $stock,
private EventDispatcher $events,
) {}
public function handle(OrderInput $input): Order
{
$this->stock->reserve($input->items);
$order = $this->orders->create($input);
$this->events->dispatch(new OrderPlaced($order));
return $order;
}
}Legacy refactor · voor / na
−68% loadSymfony 4 → Symfony 7, 6 maanden traject
API-flow · REST + queue
SchaalbaarLaravel + Horizon · idempotent
- 01
Request validation
Form Request + DTO + strict types.
- 02
Business logic
Service-class met dependency injection.
- 03
Database tx
Transactie met repository-pattern.
- 04
Domain events
Event dispatch na commit, niet ervoor.
- 05
Queued jobs
Notificaties, sync, externe API's via queue.
- 06
Observability
Sentry + structured logs + metrics.
API-dashboard
Sentry + APMRealtime monitoring · per endpoint
Sentry + APM
POST /api/v1/orders
P95: 142 ms · Error rate: 0,02%
Hoe zou dit er in jouw shop uitzien? Ik denk graag mee — gewoon Maarten zelf.
Herkenbaar?
PHP-problemen die ik vaak voorbij zie komen
Bijna elk traject begint met een variant op deze klachten — en bijna altijd is de oplossing geen rewrite, maar gerichte modernisering.
Legacy codebase die niemand durft aan te raken
Pijn: PHP 5.6, geen tests, 12-jarige spaghetti, ex-developer onbereikbaar. Elke wijziging kan de hele boel breken — en niemand weet wat er gebeurt als je 'm aanraakt.
Aanpak: Strangler-pattern: eerst characterization-tests om de bestaande code, dan stuk voor stuk vervangen door schone module. PHP-versie naar 8.3, dependency-update, geen big-bang.
Trage backend, niemand weet waarom
Pijn: Response-tijden van seconden, occasional 500-errors, server-load piekt op de gekste momenten. 'Misschien moeten we naar een grotere server?'
Aanpak: Profilering met XHProf/Tideways, query-analyse, N+1 fixen, caching waar zinvol. Vaak −70%+ response-tijd zonder grotere server.
Security-audit afgekeurd
Pijn: Pentest meldt SQL-injectie, XSS, verouderde dependencies, secrets in repo. Compliance-team blokkeert release.
Aanpak: Stapsgewijs oplossen: input-validatie, prepared statements, escaping, dependency-update via Composer audit, secrets via env/vault, GitHub security alerts.
Database trekt het niet meer
Pijn: Tabel met 12M rijen, queries van seconden, indexen ontbreken of fout, JOIN's op 6 tabellen voor elke pagina-load.
Aanpak: Index-analyse, query-rewrite, denormalisatie waar zinvol, caching met Redis, eventueel partition of read-replica. Sneller én voorbereid op groei.
Deploys zijn een evenement
Pijn: Elke release is FTP-uploaden op zondagavond, vingers kruisen en hopen. Roll-back betekent backup terugzetten.
Aanpak: CI/CD via GitHub Actions / GitLab CI, automatische tests, staging-deploy, blue-green of atomic deploy met rollback. Releases worden saai — en dat is goed.
Geen testdekking
Pijn: 0% tests, elke wijziging is een gok, bugs lekken door naar productie. 'We hebben geen tijd voor tests' — terwijl bugfixen het dubbele kost.
Aanpak: Eerst tests om kritieke flows, daarna PHPUnit/Pest in CI met coverage-rapport. Geen dogma 100%, maar 70%+ op het bedrijf-kritieke pad.
Externe API's zijn een blackbox
Pijn: Externe koppelingen werken meestal, behalve als de partner traag is — dan timeout, ander deel van de app vastloopt en niemand weet waarom.
Aanpak: Resilience: timeouts, retries met backoff, circuit breaker, async via queue. API-calls vallen om zonder de hele app mee te slepen.
Geen monitoring of logging
Pijn: Bug op productie? 'Kun je het opnieuw doen, dan zoek ik het op?' Logs staan op de server, niemand kijkt er ooit naar.
Aanpak: Sentry voor exceptions, structured logging naar Loki/CloudWatch, APM (New Relic/Datadog/eigen Prometheus). Bug komt binnen vóór de eerste klant belt.
PHP · Laravel · Symfony · WordPress · API's
PHP-project dat structureel beter moet?
Sparring over je codebase, je technische debt en de snelste route naar iets dat onderhoudbaar én snel is — concreet en zonder sales-trechter.
Wat het oplevert
Voorbeelden van PHP-trajecten
Een goede PHP-developer levert iets meetbaars op: snellere response-tijden, minder bugs, snellere release-cyclus, een codebase die je team graag aanraakt. Een paar voorbeelden ter inspiratie.
Response-tijd na refactor
Symfony 4 → 7 traject, query-optimalisatie en Redis-cache. P95 van 1.420 ms naar 180 ms zonder grotere server.
Deploys per week
CI/CD met tests, staging en blue-green deploy. Van 'release-zondag' naar 'meerdere keren per dag', zonder downtime.
Testdekking opgebouwd
Strangler-pattern: characterization-tests rond legacy, daarna nieuwe code met Pest. Bugs op productie −82%.
Queries per request
N+1 wegwerken en eager loading. Bij 320 req/min: minder load, hogere throughput, lagere DB-kosten.
Upgrade van PHP 5.6
Gefaseerd: dependencies, syntax, deprecations, type-decoratie. Geen big-bang, geen downtime, modernere stack.
Security-audit gehaald
SQL-injectie, XSS, dependency-issues opgelost. Pentest na 3 maanden: geen kritieke findings, compliance ontgrendeld.
Externe API's gehard
Timeouts, retries, circuit breaker, async queue. Externe storingen brengen de hele app niet meer plat.
Server-kosten omlaag
Door query-optimalisatie en OPcache-tuning kon de cloud-server een tier kleiner. Direct effect op de maandfactuur.
Observability ingericht
Sentry + structured logs + dashboards. Eerste maand: 240 onbekende exceptions ontdekt en opgelost.
Migraties zonder downtime
Online schema-migraties met gh-ost / pt-online-schema-change, zero-downtime deploys, geen onderhouds-uren meer.
PHPStan level 9
Codebase opgeschoond van 3.840 errors naar 0. Bugs door type-mismatches praktisch verdwenen.
Mail- en notify-flows stabiel
Externe SMTP / SendGrid timeouts brachten ooit checkout plat. Nu queued, retries, geen blockerende calls meer.
Job-systeem schaalbaar
Laravel Horizon / Symfony Messenger ingericht, workers per queue, monitoring per job. Backend kan piek-volume hebben.
Nieuwe dev in 2 dagen live
README, lokale Docker-setup, seed-data, contributing.md, tests. Onboarding van 2 weken naar 2 dagen.
Black Friday gehaald
Stress-test, queue-tuning, cache-warm-up. 5x normaal verkeer zonder één 5xx-error.
Welk voorbeeld lijkt het meest op jouw situatie? Ik denk graag mee — gewoon Maarten zelf.
Wat ik bouw
PHP-werk dat regelmatig terugkomt
Laravel 10/11 backends
Schoon, getest, met DI en clean architecture — niet 'enkel een controller'.
Symfony 6/7 applicaties
Voor projecten waar fijnmazige controle en strict types boven productiviteit gaan.
WordPress & WooCommerce custom
Plug-ins, custom post types, REST endpoints en performance-tuning op WP-stacks.
REST + GraphQL API's
Versioned, gedocumenteerd (OpenAPI), met rate-limiting, auth en idempotency.
Database-werk
MySQL, MariaDB, Postgres — schema-design, indexen, migraties, performance.
Legacy modernisering
PHP 5.x/7.x → 8.3, framework-upgrades, strangler-pattern, zero-downtime.
Testdekking opbouwen
PHPUnit, Pest, Mockery, end-to-end met Playwright/Cypress.
CI/CD pipelines
GitHub Actions, GitLab CI — tests, static analysis, deploys met rollback.
Security & compliance
Pentest-remediation, AVG-proof logging, secrets-management, dependency-audits.
Queues & workers
Laravel Horizon, Symfony Messenger, Redis-queues, retries en monitoring.
Performance-tuning
XHProf/Tideways, query-optimalisatie, caching, OPcache, Redis.
Observability
Sentry, structured logging, APM, dashboards — bugs vóór de eerste klant.
Multi-tenant & SaaS
Database-per-tenant of shared-schema, billing-integraties, feature-flags.
Integraties op maat
ERP (Exact, AFAS), CRM (HubSpot, Pipedrive), PSP (Mollie, Adyen, Stripe), marktplaatsen.
Data-imports en migraties
ETL-flows, één-malige migraties, recurring syncs met dedupe en retry.
Specifiek onderdeel in je hoofd? Ik denk graag mee — gewoon Maarten zelf.
Koppelingen
Stacks en systemen waarmee ik regelmatig werk
Laravel 10/11 + Livewire / Inertia
Voor moderne PHP-webapps en SaaS.
Symfony 6/7 + Doctrine
Voor projecten met strict types en domain-driven design.
WordPress + WooCommerce + ACF
Custom plug-ins, headless, performance-tuning.
MySQL / MariaDB / Postgres / Redis
Schema, indexen, migraties en caching.
GitHub Actions / GitLab CI / Bitbucket
CI/CD met tests, static analysis en deploys.
Docker / Kubernetes / Forge / Ploi
Containerized of managed hosting.
Sentry / Datadog / New Relic / Prometheus
Observability en APM.
Stripe / Mollie / Adyen / PayPal
Betaal-integraties met webhooks en reconciliation.
Exact / AFAS / SnelStart / HubSpot
ERP- en CRM-koppelingen via API.
Ander systeem? Vraag het even. Ik denk graag mee — gewoon Maarten zelf.
Hoe het werkt
Een PHP-traject in 4 stappen
- 01
Audit & plan
Codebase en infra in kaart, technische debt benoemen, prioriteiten en fases vaststellen.
- 02
Tests & vangnet
Tests rond kritieke flows, monitoring en CI opzetten — zodat refactor veilig is.
- 03
Refactor & build
Stap voor stuk vervangen of nieuw bouwen, met PR-reviews en staging-deploys.
- 04
Live & beheer
Go-live met monitoring, daarna doorlopend onderhoud of overdracht aan jouw team.
Klaar om de eerste stap te zetten? Ik denk graag mee — gewoon Maarten zelf.
Veelgestelde vragen
Werk je met Laravel, Symfony of WordPress?
Met alle drie, en ook met plain PHP wanneer geen framework nodig is. Keuze hangt af van wat er al draait, je team en de aard van het project. Geen dogma — ik denk mee in wat past.
Kun je een legacy PHP 5.x of 7.x project oppakken?
Ja, vaak juist daar. Met characterization-tests, dependency-update via Rector en gefaseerde upgrade naar PHP 8.3 zonder big-bang.
Bouw je ook nieuwe API's?
Ja. REST (met OpenAPI-docs) of GraphQL, met auth (Sanctum, Passport, JWT, OAuth2), rate-limiting, versioning en idempotency. Inclusief gegenereerde client-SDK's wanneer relevant.
Werk je met testdekking?
Standaard, ja. PHPUnit of Pest in CI met coverage-rapport. Geen dogma 100%, maar 70%+ op het bedrijfskritieke pad — en altijd characterization-tests vóór een refactor.
Wat met performance-issues?
Profilering met XHProf, Tideways of Blackfire, query-analyse, N+1 wegwerken, caching (Redis, OPcache, query-cache). Vaak −50%+ response-tijd zonder grotere server.
Kun je helpen met security?
Ja, ook met pentest-remediation. Input-validatie, prepared statements, escaping, CSRF, secrets-management, dependency-audits via Composer audit en GitHub security alerts.
Wat voor CI/CD doe je?
GitHub Actions of GitLab CI: tests, PHPStan/Psalm (level 8-9), Rector, Pest/PHPUnit, end-to-end. Daarna staging-deploy, smoke-tests en productie-deploy met rollback-pad. Releases worden saai.
Werk je met queues?
Ja. Laravel Horizon, Symfony Messenger of generieke Redis-queues. Voor mails, externe API-calls, exports, imports en zware berekeningen — met retries, monitoring en dead-letter handling.
Doe je ook DevOps?
Op het niveau dat een full-stack PHP-developer hoort te doen: Docker, deployment-pipelines, Forge/Ploi of containers, Sentry, structured logging. Voor zware infra werk ik samen met een DevOps-specialist.
Kun je in een bestaand team werken?
Ja, dat doe ik vaak — als freelance backend-developer in een team, of als sparring-partner voor jullie junior/medior devs. Code-reviews, mob-programming en kennisoverdracht horen daarbij.
Werk je white-label voor bureaus?
Regelmatig. Repo bij jullie of bij mij, communicatie via jullie project-lead, sprint-demo's. Klant ziet jullie merk.
Hoe zit het met onderhoud na livegang?
Verschillende modellen: vast aantal uren per maand, fixed bandbreedte voor bugs en kleine features, of pure overdracht aan jouw team met een goede README en onboarding.
PHP · Laravel · Symfony · WordPress · API's
PHP-project dat structureel beter moet?
Sparring over je codebase, je technische debt en de snelste route naar iets dat onderhoudbaar én snel is — concreet en zonder sales-trechter.
