Te faire une énumération complète ici serait sans doute fastidieux, on va résumer très sommairement deux points majeurs.
Le modèle objet de PHP4 est assez squelettique si on le compare au modèle de PHP5. Ce dernier en effet s'approche de très près du modèle objet d'un langage comme Java par exemple. les notions de
private,
public,
protected sont apparue en PHP5, ça veut dire qu'aucune méthode ou propriété n'est (ni ne peut être) privée ou protégée en PHP4.
Autre point qu'a apporté PHP5, le passage par référence : s'il fallait en PHP4 l'indiquer explicitement, c'est devenu le fonctionnement normal par défaut de PHP5 : il y a donc des incompatibilités possibles enter un code écrit en PHP4 et un serveur assorti de PHP5 qui donneront des résultats faux où à tout le moins bizarres. Du reste, si tu actives en PHP5 la directive display_error à ON en mettant le error_reporting à E_STRICT, tu auras un avertissement de passage par référence obsolète si tu utilises la méthode PHP4.
Il y a également une nouvelle manière de nommer le constructeurs d'une classe avec __construct() au lieu du nom de la classe. La notion de destructeur n'existait pas en PHP4.
Enfin, comme
Sekiltokay te l'a suggéré, tu devrais faire un tour dans la doc de PHP, il n'y a pas que la référence des fonction qui y est intéressante, il y a par exemple une courte page sur ces différences à prendre en compte dans une migration,
http://www.php.net/manual/fr/faq.migration5.php et
http://www.php.net/manual/fr/migration5.php où tu auras là aussi les grandes lignes.
Enfin, je dirais que les limitations sont fixées par tes besoins : pose-toi donc la question de ce que tu veux pouvoir faire et analyse dans quelle mesure tu peux ou non le faire avec une version ou une autre de PHP.