PHP4 vs. PHP5

PHP5 je takmer plne spätne kompatibilné s novšími verziami PHP4, drvivá väčšina súčasných aplikácií (ak boli pí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 ďalej. Napriek tomu, však, došlo v novej verzii k niekoľkým úpravám, ich (čiastočný) prehľad ďalej uvádzame. Detailnejšie informácie je možné nájsť v "Dodatku D" manuálu PHP.
 
Hlavná časť zmien má ráz rozšírenia funkčnosti, hlavne smerom k objektovo-orientovanému programovaniu. Ide hneď o niekoľko základný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 ich poznáme napríklad z Javy).
  2. Nová je i podpora pre štrukturované ošetrovanie výnimiek (SEH) spôsobom bežným v iných jazykoch, teda pomocou try...throw...catch.
  3. Ďalšie nie menej dôležité zlepšenie sa týka plne objektovej podpory spracovania XML dokumentov pomocou štandardného rozhrania DOM a ich rýchla XSLT transformácia poskytovaná extenziou XLS (rádovo rýchlejšia, než doposiaľ používaný Sablotron).
  4. Zmien sa dočkala i podpora databází, a to zavedením objektového rozhrania MySQLi (MySQL improved) a podporou vstavanej databázy SQLite (tá 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 je pridanie možnosti nastaviť parametrom funkcie preddefinované hodnoty (táto hodnota bude použitá, ak daný parameter nie je funkciou pri volaní odovzdaný). To prináša možnosť ľahkej implementácie funkcií s premennými počtami parametrov, a tým čiastočne nahrádzajú chýbajúce možnosti preťažovania funkcií.
  6. Posledným rošírením je pridanie nových funkcií do súčasných extenzií, najdôležitejšie sú zrejme funkcie na prácu s poľami (rekurzívne prechádzanie, užívateľské porovnanie...) array_udiff(), array_walk_recursive() a ďalšie.
V PHP5 bola i ľahko zvýšená typová bezpečnosť jazyka (napríklad funkcie na prácu s poľom vyvolávajú varovné hlásenie, ak im je odovzdané niečo iné než pole) a odstránených 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 namiesto predchádzajúcej - 1. K tomu sa viaže i zavedenie novej úrovne chýb E_STRICT, ktorá povoľuje zobrazenie rozličných tipov a poznámok na zvýšenie prenosnosti, kompatibility a bezpečnosti skriptov.
 
Drobným zmenám neunikol ani komplilá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 vykonávanie predčasne prerušené, napríklad pomocou return). Naviac je novo generované chybové hlásenie, ak je tento súbor vložený niekoľkokrát (tomuto je možné sa vyhnúť použitím include_once/require_once).
 
Objekty (inštancie tried) ako parametre funkcií sa po novom predávajú odkazom, nie hodnotou; funkcia teda môže zmeniť objekt, ktorý jej bol predaný ako parameter (nepracuje so svojou lokálnou kópiou, ako je to pri primitívnych typoch - čísel, reťazcov...). Hlavným zmyslom tohoto 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 štrukturované ošetrovanie výnimiek si vyžiadal rezerváciu týchto nových kľúčových slov: