PHP5 je z takmer plne spätne kompatibilný s novšími verziami PHP4, drvivá väčšina existujúcich aplikácií (ak boli tieto napísané aspoň v čiastočnom súlade so základnými pravidlami návrhu aplikácií v PHP) teda bude fungovať bez akýchkoľvek zásahov. Napriek tomu však došlo v novej verzii k niekoľkým úpravám, ktorých (čiastočný) prehľad ďalej uvádzame. Detailnejšie informácie je možné nájsť v „Dodatku D“ manuále PHP.
Hlavná časť zmien má ráz rozšírenie funkčnosti, hlavne smerom k objektovo orientovanému programovania. Jedná sa hneď o niekoľko zásadných prírastkov: 1) PHP5 obsahuje úplne nový objektový model, ktorý prináša možnosť plnohodnotného OO návrhu vrátane abstraktných rozhraní (tak, ako ho poznáme napríklad z Javy).
2) Nová je aj podpora pre štruktúrované ošetrovanie výnimiek (SEH) spôsobom bežným v iných jazykoch, teda pomocou try … throw … catch.
3) Ďalšie nemenej dôležité zlepšenie sa týka plne objektovej pomoci spracovanie XML dokumentov pomocou štandardného rozhrania DOM a ich rýchle XSLT transformácie poskytovanej extenzií XSL (rádovo rýchlejší, než doteraz používaný Sablotron).
4) Zmien sa dočkala aj podpora databáz, a to zavedením objektového rozhrania MySQL (MySQL improved) a podporou vstavanej databázy SQLite (ta programátorom prináša plnohodnotnú SQL databázu bez potreby externého servera, priamo na lokálnych súboroch).
5) Významným (a dlho žiadaným) posunom vpred je pridanie možnosti nastaviť parametrom funkcie preddefinované hodnoty (táto hodnota bude použitá, ak daný parameter nemá funkciu pri volaní odovzdaný). To prináša možnosť jednoduchej implementácii funkcií s premennými počtami parametrov a tým ju čiastočné nahradí možnosť preťažovania funkcií.
6) Posledným rozšírením je pridanie nových funkcií do existujúcich extenzií, najdôležitejšie sú zrejme funkcie pre prácu s poliami (rekurzívne prehliadanie, užívateľské porovnávanie …) array_udiff (), array_walk_recursive () a ďalšie.
V PHP5 bola aj mierne zvýšená typová bezpečnosť jazyka (napríklad funkcie pre prácu s poľami vyvolávajú varovné hlásenie, ak im je pridelené niečo iné, ako pole) a odstránilo niekoľko možných chýb v návrhu - napríklad funkcie get_class () a spol. už neprevádzajú všetky písmená na malé a ip2long () vracia pri chybe FALSE miesto skoršie -1. K tomu sa viaže aj zavedenie novej úrovne chýb E_STRICT, ktorá povoľuje zobrazenie rozličných tipov a poznámok pre zvýšenie prenosnosti, kompatibility a bezpečnosti skriptov.
Drobným zmenám neunikol ani kompilátor, ktorý teraz pri vkladaní externých skriptov pomocou include / require importuje všetky funkcie v danom súbore bez ohľadu na to, kde v súbore sú (ak je jeho výkon predčasne prerušený napríklad pomocou return). Navyše je novo generované chybové hlásenia, ak je ten istý súbor vložený niekoľkokrát (tomuto sa dá vyhnúť použitím include_once / require_once).
Objekty (inštancie tried) ako parametre funkcií sa novo odovzdávajú odkazom, nie hodnotou; funkcia teda môže zmeniť objekt, ktorý jej bol poslaný ako parameter (nepracuje so svojou lokálnou kópiou, ako je tomu u primitívnych typov - čísel, reťazcov …). Hlavným zmyslom tohto postupu je veľký nárast výkonu PHP (nemusí dochádzať ku kopírovaniu celej inštancie pri každom volaní funkcie).
Nový objektový model a štruktúrované ošetrovanie výnimiek si vyžiadalo rezerváciu týchto nových kľúčových slov:
abstract
catch
clone
extends
final
implements
interface
php_user_filter
private
protected
public
this
throw
try