PHP5 menambahkan Iterator, seperangkat antarmuka siap pakai yang membantu menavigasi dan menangani struktur data hierarki. Ini adalah salah satu fitur baru yang paling menarik dari PHP5.
Iterator ini secara signifikan mengurangi kode yang diperlukan untuk memproses pohon dokumen XML atau kumpulan file. Sejumlah besar Iterator digunakan di PHP5, termasuk ArrayIterator, CachingIterator, LimitIterator, RecursiveIterator, SimpleXMLIterator, dan DirectoryIterator.
DirectoryIterator dapat memproses file dalam direktori dengan cepat dan efisien. Dengan sedikit lebih banyak kreativitas dalam proses pengkodean, DirectoryIterator juga dapat digunakan untuk memproses pohon direktori bersarang secara rekursif. Kedua tugas tersebut dapat diselesaikan hanya dengan menggunakan beberapa baris kode, yang merupakan peningkatan signifikan dibandingkan pendekatan "standar".
Memproses direktori satu tingkat Pertama kita mulai dengan tugas sederhana: memproses direktori satu tingkat. Masukkan (atau salin) kode berikut (Listing A), modifikasi jalur direktori untuk mencerminkan konfigurasi lokal:
Listing A
<?php$it = new DirectoryIterator("/tmp/mystuff");foreach($it as $file) {if ( !$it->isDot()) {echo $file . "n";}}?>Lihat output dari kode ini di browser, Anda akan melihat daftar file di direktori yang ditentukan. Bagaimana ini bisa terjadi? DirectoryIterator menyediakan antarmuka yang telah ditentukan untuk menyatakan kembali isi direktori; setelah lokasi direktori target diambil sampelnya, maka dapat diperlakukan sebagai array PHP standar, dengan setiap elemen mewakili file dalam direktori. Perhatikan bahwa ia menggunakan metode isDot () untuk memfilter masing-masing direktori "." dan "..".
Menangani Pohon Direktori Bersarang Menangani pohon direktori bersarang secara rekursif hampir sama mudahnya. Dalam hal ini, DirectoryIterator perlu memeriksa setiap objek yang ditemuinya di direktori tingkat tunggal untuk menentukan apakah itu file atau direktori. Jika itu adalah direktori, masuklah satu tingkat lebih dalam untuk memeriksa konten tingkat berikutnya. Ini mungkin terdengar cukup rumit, dan di masa lalu biasanya memerlukan lebih dari 15 baris kode.
Namun, dengan PHP5, Anda hanya memerlukan dua Iterator baru: RecursiveIterator dan RecursiveIteratorIterator, yang menggabungkan semua fitur di atas. Lihat Daftar B:
Daftar B
<?php$it = new RecursiveDirectoryIterator("/tmp");foreach(new RecursiveIteratorIterator($it) as $file) {echo $file hasilnya Semua file dan direktori di bawah direktori awal akan terdaftar. Tak perlu dikatakan lagi, antarmuka bawaan rekursif ini sangat nyaman jika Anda perlu memproses semua file di bawah tingkat direktori tertentu - misalnya, mengompresi pohon direktori secara rekursif; atau memodifikasi izin grup/pemilik dari serangkaian file yang disarangkan.
Aplikasi kehidupan nyata: Mencetak pohon direktori Mencetak pohon direktori grafis adalah aplikasi umum rekursi direktori. Menggunakan Iterator untuk menangani tugas ini sangat sederhana, karena dokumentasi kelas Iterator berisi kelas instance yang ditulis khusus untuk aplikasi ini. DirectoryTreeIterator (terima kasih kepada Marcus Boerger) memberikan perbaikan lain pada RecursiveIteratorIterator yang dibahas sebelumnya, khususnya tag ASCII yang mewakili kedalaman dan posisi dalam struktur pohon.
Listing C mengilustrasikan penggunaan DirectoryTreeIterator.
Listing C
<?php$it = new DirectoryTreeIterator("/tmp/cookbook/");foreach($it as $path) {echo $path . "n";}?>Berikut adalah bagian dari keluaran yang Anda lihat:
| -ch01|.|-resep01|.|.|-contoh01.php| lebih memahami nilai dari DirectoryIterators ini, cobalah mengkodekan tiga aplikasi yang diilustrasikan dalam tutorial ini menggunakan fungsi file dan direktori standar.