Je me suis retrouvé pris dans les changements antérieurs à PHP 5.3 qui allaient changer dans les versions 5.3 et suivantes, concernant la SPL (StandardPHPLibrary) et d'autres choses qui allaient être déplacées vers les (horribles) extensions PECL.
La principale chose qui a changé depuis la version 5.3 est que la SPL est devenue une extension qui ne peut plus être désactivée. journal des modifications de 5,3 en notant que
- Ajout de SPL à la liste des extensions standard qui ne peuvent pas être désactivées. (Marcus)
Ainsi, toutes les classes fantaisistes comme DirectoryIterator ou SPLDoublyLinkedList sont maintenant une suite de classes fixes fournies avec PHP 5.3.
Il y avait beaucoup de discussions sur le fait que le DirectoryIterator était encore très maladroit dans l'itération sur les fichiers/répertoires et d'un comportement pas assez anonyme au système de fichiers utilisé. Parce que selon le système de fichiers (Windows NTFS / *nix EXTx), les résultats que l'itérateur retournait étaient différents d'un autre, où *nix
par défaut, résulte toujours les répertoires point et double point ( .
et ..
) comme des répertoires valides. Ces répertoires à points peuvent ensuite être filtrés dans la boucle en utilisant la fonction isDot()
méthode.
$it = new DirectoryIterator(__DIR__);
foreach ($it as $fileinfo) {
if (!$fileinfo->isDot())
var_dump($fileinfo->getFilename());
}
Alors FilesystemIterator
est devenue la nouvelle classe parente en PHP 5.3, qui avant sa sortie était la classe DirectoryIterator
(où FilesystemIterator
étend DirectoryIterator
pour mettre en œuvre cette comportement interchangeable par défaut ). Le comportement, ou le résultat que le FilesystemIterator
produite, serait alors égale à tous les différents systèmes de fichiers et interchangeable sans qu'il soit nécessaire d'ajouter une surcharge dans la boucle.
$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
echo $fileinfo->getFilename() . "\n";
}
C'est une bonne question de savoir pourquoi ils n'ont pas mis à jour la documentation pour informer l'utilisateur sur le fait qu'en fait, la fonction FilesystemIterator
a précédé le DirectoryIterator
.