Elle est bientôt là : après plus de 10 mois d'attente (PHP 5.3 alpha 1 est sorti le 1
er août 2008), la version finale de PHP 5.3 va finalement pointer le bout de son nez
le 25 juin 2009 ! La RC3, étant candidate à la « Gold Release Candidate » (qui précède généralement la version finale), vient d'être publiée. L'attente aura été longue, mais les modifications apportées sont nombreuses et de taille, à tel point que cette version devrait être la dernière version majeure de PHP 5 avant PHP 6 (PHP 5.4 pourrait sortir, mais ce serait seulement après PHP 6). Il faut savoir que cette version est un avant-goût de PHP 6 dont elle hérite la plupart de ses nouvelles fonctionnalités, et certaines étant attendues depuis un certain temps.
Quoi de neuf ?
Les espaces de noms
Appelés "namespace" en anglais, c'est
LA modification majeure qui a pris du temps. À l'instar du langage Java ou C++, les espaces de noms permettent de classer vos fonctions et / ou classes dans des ensembles, qui sont en fait une sorte de préfixe pour toutes vos variables / fonctions / classes. Toutes les fonctions natives de PHP seront placées dans l'espace de nom global. Vous pourrez créer vos propres espaces de noms pour vos fonctions, classes et variables personnalisées, sans interférer avec des noms déjà existants qui sont utilisés par d'autres librairies (et qui sont dans un autre espace de noms).

Les espaces de noms aident à organiser le code et favorisent la modularité des développements lorsqu'ils sont utilisés à bon escient. Il en découle une maintenance et une réutilisation plus facile de codes provenant de sources différentes.
Lire la doc sur PHP.net.
Code : PHP - Définition d'une fonction dans un espace de nom particulier 1
2
3
4
5
6
7
8
9
10 | <?php
namespace A\B\C;
/* Cette fonction est A\B\C\fopen */
function fopen() {
/* ... */
$f = \fopen(...); // appel à fopen global
return $f;
}
?>
|
Les fermetures, ou fonctions anonymes.
Appelées « closure » ou « lambda functions » en anglais, elles permettraient de définir des fonctions sans leur donner de nom. Par exemple, une variable pourra contenir une fonction et on pourra l'utiliser en appelant la variable avec les arguments correspondants ou bien encore comme callback d'une autre fonction. C'est en quelque sorte un remplacement de la fonction create_function(), qui nécessite un peu de gymnastique à l'utilisation.
Voir l'exemple sur PHP.net.
Code : PHP1
2
3
4
5 | <?php
$afficher = function ($chaine) {
echo htmlspecialchars($chaine);
}
$afficher('<script>alert("Tout va bien.");</script>');
|
Un pilote MySQL natif
Ce nouveau pilote, appelé MySQLnd pour MySQL native driver, a été conçu spécialement pour PHP. Il est inclus dans le Zend Engine et utilise son gestionnaire de mémoire. En outre la nouvelle librairie est plus rapide, car elle n'a pas besoin de copier le résultat de votre fetch() dans une variable PHP : elle utilise directement le jeu de données stocké en mémoire. Du côté de l'utilisateur, ça ne change rien : vous continuerez à utiliser MySQLi ou PDO.

Ce sont ces 2 librairies qui vont utiliser le pilote MySQLnd au lieu de l'ancien pilote MySQL. Enfin, le pilote MySQLnd est livré sous licence PHP, ce qui permet un support natif de MySQL par PHP.
En savoir plus sur le pilote mysqlnd.
Des améliorations du php.ini
php.ini est le fichier de configuration de PHP. Il a été rendu plus flexible par l'ajout de
sections spécifiques à un domaine ou à un dossier local. Les directives présentes dans ces sections ne seront pas modifiables par des fichiers INI utilisateurs (par exemple via .htaccess) ni pendant l'exécution. Ça peut être un moyen sûr de ne pas afficher les erreurs dans un environnement de production.
Code : Apache - Activation de l'affichage des erreurs uniquement sur le serveur de développement1
2
3 | [HOST=dev.site.com]
error_reporting = E_ALL
display_errors = On
|
Autres améliorations
- Apparition de la méthode magique __callStatic(), similaire à __call() mais pour les méthodes statiques.
- Ajout d'un ramasse-miettes (garbage collector) pour détecter les références croisées et les libérer (non activé par défaut, nécessite une option de configuration).
- Meilleur support de Windows, notamment en ce qui concerne les fonctions du système de fichiers. La version minimale de Windows est désormais 2000 / XP, les anciennes versions (98, ME, NT 4) ne sont plus supportées.
- Ajout des librairies intl et sqlite3.
- L'extension PHAR passe dans le cœur de PHP, et quitte donc le dépôt PECL. Pour son utilisation, plus d'informations dans la doc.
- Ajout des constantes __DIR__ et __NAMESPACE__
- Les arguments devant être passés par références sont désormais positionnés à NULL lorsqu'ils sont passés par valeur / copie, accompagnés d'une erreur de niveau WARNING.
- LSB : Late state binding ou résolution statique à la volée : le mot-clé static:: référencera la classe qui est appelée durant l'exécution et non pas la classe courante comme le fait self::
- La syntaxe NOWDOC : elle est au type de syntaxe HEREDOC ce que sont les apostrophes (') aux doubles quotes (").
- L'opérateur ternaire ?: est étendu. Son utilisation n'autorisait que <?php condition ? valeur_si_vrai : valeur_si_faux
, mais on utilisait bien souvent : <?php ma_valeur ? ma_valeur : autre_valeur
. Cette dernière commande pourra désormais être abrégée en : <?php ma_valeur ?: autre_valeur
.
- Ajout du niveau d'erreur E_DEPRECATED, généré dans le cas d'utilisation d'une syntaxe, d'une fonction, d'une classe, d'une méthode (etc.) qui est dépréciée. Par exemple, les fonctions utilisant les expressions régulières « POSIX » (ereg_*) ou bien les configurations comme safe_mode, magic_quotes_*, etc. sont dépréciées.
- PHP supportera maintenant le système des labels et l'instruction goto, qui permettent de se rendre à un autre endroit du programme.
- Ajout de la méthode magique __invoke() : vous pourrez désormais appeler vos objets comme des fonctions.
Code : PHP1
2
3
4
5
6
7
8 | <?php
class MaClasse {
public function __invoke() {
echo 'Je suis appelé comme une fonction !';
}
}
$o = new MaClasse;
$o(); // Affichera "Je suis appelé comme une fonction !"
|
Et PHP 6 dans tout ça ?
En plus de cette liste non négligeable de nouveautés qui seront présentes dans PHP 5.3, la sortie de PHP 6 ajoutera aussi de nombreuses fonctionnalités. Ainsi, en voici quelques unes :
- Support de l'Unicode : étant donné le fait qu'il y eut et qu'il y a encore de nombreux problèmes liés à l'encodage des fichiers et des informations des flux, un des buts de PHP 6 est que l'Unicode soit totalement supporté. Vous trouverez ici une liste des fonctions modifiées pour supporter totalement l'Unicode.
- Configurations de « sécurité » supprimées : des fonctionnalités comme register_globals (déjà désactivées depuis PHP 4.2.0 mais toujours existantes !), safe_mode et magic_quotes vont être définitivement supprimées à partir de PHP 6.0
- Extensions par défaut enlevées : quelques fonctionnalités incluses par défaut lors du téléchargement de PHP seront enlevées et transférées vers PECL car peu utilisées et modifiées. Entre autres, les fonctions marquées dans 5.3 comme étant dépréciées, comme les expressions régulières POSIX.
La
liste officielle des changements est disponible sur
le site de PHP.
144 Participations
Connectez-vous !
Connectez-vous !
Revenir à la liste des news