La phase de vote du RFC PREG_THROW_ON_ERROR a débuté, annoncée par son auteur Osama Aldemeery sur la liste internals de PHP après une période de discussion sans points ouverts. Le vote se termine le 18/09/2026 à 17h00 UTC. Le RFC est disponible sur wiki.php.net/rfc/preg_throw_on_error et l'implémentation dans la pull request 22797 de php-src.

La proposition ajoute un drapeau optionnel PREG_THROW_ON_ERROR. Passé à n'importe quelle fonction de correspondance preg_*, il fait que chaque erreur PCRE enregistrée par l'appel est également levée sous forme de \PregException. Le code et le message de l'exception correspondent exactement à preg_last_error() et preg_last_error_msg(). Sans le drapeau, le comportement reste identique à aujourd'hui.

Tim Düsterhus a voté contre tout en étant d'accord avec le concept général. Il s'oppose au maintien d'un Warning pour les erreurs de compilation : la fonctionnalité étant nouvelle et optionnelle, il n'y a selon lui aucune contrainte de rétrocompatibilité, et la garantie que $e->getMessage() soit égal à preg_last_error_msg() affaiblit la fonctionnalité. L'exception devrait contenir toutes les informations nécessaires.

Il conteste aussi le fait que les exceptions levées dans les callbacks utilisateur ne soient pas encapsulées. À ses yeux, elles devraient devenir une \PregException avec l'exception d'origine en $previous. Sinon, il faut toujours un catch(Exception) autour de chaque appel preg_, ce qui annule l'intérêt d'une classe d'exception dédiée. Il souligne enfin que cela contredit la politique PHP sur les throwables, qui impose aux extensions d'encapsuler les exceptions externes et de renseigner $previous.