PHP är ett hybridspråk. Det innebär är att man kan välja att skriva både procedurellt/strukturerat och objektorienterat. Det går även att blanda dessa två paradigmer.
Med procedurell eller strukturerad programmering i PHP menar man att ett program är uppbyggt av en serie funktioner som är placerade i det globala utrymmet. Skriver man objektorienterat väljer man istället att inkapsla funktioner och variabler (eller metoder och attribut som de brukar kallas i objektorientering) i klasser. Man skapar sedan instanser (dessa kallas objekt) av dessa klasser. Objektorientering kan vara underbart. Det är ett sätt att inte bara inkapsla data och funktionalitet utan att gruppera kod på ett snyggt och logiskt sätt.

I många fall är det en fördel att skriva objektorienterad PHP.  Ett klassiskt exempel i PHP-sammanhang är en klass som abstraherar kommunikation med en databas. I en ”databasklass” kan man lagra data som t.ex. databaskopplingen, den senast utförda SQL-frågan, antalet SQL-frågor som utförts osv. Genom att inkapsla dessa data i ett objekt slipper man ha variabler relaterade till databaskommunikationen i det globala utrymmet vilket gör applikationen ”snyggare” och gör att man löper mindre risk för namnkollisioner. Utöver data kan man inkludera t.ex. funktioner för felhantering. Ett objekt av databasklassen är dessutom praktiskt att skicka runt till funktioner och metoder i andra klasser. Generellt sätt kan man säga att om man upptäcker att man har klasser som enbart består av metoder har man varit en dålig objektorienterare. Det är först när man drar nytta av klassers förmåga att inkapsla både data och funktionalitet som man börjar utnyttja objektorientering till fullo.