
PHP 5.4 est sorti en ce début du mois de mars 2012 soit deux ans après la version 5.3. Outre le flot de bugs corrigés (ChangeLog), PHP 5.4 amène plusieurs améliorations conceptuelles. Pour rappel PHP 6 est passé à la trappe. Son principal apport devait être le support natif de l’Unicode. Notez que cela n’est toujours pas implémenté dans cette version 5.4. Enfin, un très gros effort d’optimisation a été fourni pour améliorer la vitesse d’exécution du code et diminuer la charge mémoire. Je n’ai pas fait de test comparatif, je crois la documentation.
Migration
Je ne vais pas ici vous expliquer comment migrer d’une version de PHP 5.x à 5.4, cependant, vous ne devriez rencontrer aucun problème sauf si vous utilisez les éléments suivants :
- Les magic-quotes ont été supprimées
- Safe_Mode n’est plus supporté
- register_globals et register_long_arrays ont été supprimées.
- Call-time pass by reference a été supprimée.
- Les instructions break et continue n'acceptent plus des paramètres variables
- Les algorithmes Salsa10 et Salsa20 de hash ont été retirés.
- array_combine() retourne maintenant array() au lieu de FALSE lorsque vous lui passez deux tableaux vides comme paramètres.
- define_syslog_variables()
- import_request_variables()
- session_is_registered(), session_register() et session_unregister().
- Les alias mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(), mysqli::client_encoding() et mysqli_stmt::stmt().
Les guides de migrations entre les différents versions de PHP 5.0.x">, 5.1.x, 5.2.x et 5.3.x.
Nouvelles fonctionnalités
La liste des nouvelles fonctionnalités est assez longue. Pour une information complète, je ne peux que vous conseiller la documentation officielle. Voici cependant un aperçu des améliorations les plus prometteuses. Certaines fonctionnalités sont présentées comme puissantes, il faudra donc prendre le temps de les explorer pour en tirer le meilleur parti.
Une grande nouveauté, essentielle à mes yeux est que PHP considère dorénavant par défaut que les données envoyées à un navigateur web sont encodées en UTF-8 et non plus en ISO-8859-1. J’ai envie de dire : « Il était temps ».
- Le support des traits a été ajouté. Les traits sont un mécanisme de réutilisation de code.
- La syntaxe courte des tableaux a été introduite, exemple: $a = [1, 2, 3, 4]; ou $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];.
- Accès aux index de tableaux en sortie de fonctions, exemple: foo()[0].
- <?= est désormais toujours disponible, quel que soit le réglage de short_open_tag dans la configuration du php.ini.
- Accès aux attributs d'un objet dès l'instanciation, exemple: (new Foo)->bar().
- La syntaxe Class::{expr}() est maintenant supportée.
- Le formatage des chaines pour la base 2 a été ajouté, exemple: 0b001001101.
- Messages d'erreur améliorés.
- L'extension de session peut maintenant suivre la progression de l'upload de fichiers.
- Serveur web CLI embarqué dédié au développement.
Nouvelles fonctions
PHP Core:
- hex2bin() => Convertit un hexadécimale en binaire
- http_response_code() => Récupère ou change le code de la réponse HTTP
- get_declared_traits() => Retourne un tableau contenant tous les traits déclarés
- getimagesizefromstring() => Récupère la taille d'une image depuis une chaîne
- stream_set_chunk_size() => Change la taille du segment du flux
- socket_import_stream() => Importe un flux
- trait_exists() => Vérifie si un trait existe
- header_register_callback() => Enregistre une fonction de rappel pour l'envoi des en-têtes
SPL:
- class_uses() =< Retourne le trait utilisé par une classe donnée.
Session:
- session_status() => Détermine le statut de la session courante
- session_register_shutdown() => Fonction de fermeture de session
Mysqli:
- mysqli_error_list() => Retourne une liste d'erreur depuis la dernière commande exécutée
- mysqli_stmt_error_list() => Retourne une liste d'erreurs pour la dernière requête exécutée
Libxml:
- libxml_set_external_entity_loader()
LDAP:
- ldap_control_paged_result()
- ldap_control_paged_result_response()
Intl:
- transliterator_create()
- transliterator_create_from_rules()
- transliterator_create_inverse()
- transliterator_get_error_code()
- transliterator_get_error_message()
- transliterator_list_ids()
- transliterator_transliterate()
Zlib:
- zlib_decode() => Décompresse des données encodées raw/gzip/zlib
- zlib_encode() => Compresse des données encodées raw/gzip/zlib