Koleksi

Koleksi adalah struktur data dasar dalam pemrograman. Sebagai tambahan pada pemrograman PHP, array dipakai secara luas untuk mewakili koleksi struktur data. Array PHP adalah campuran dari array berindeks-kardinal dan tabel campuran.

Untuk menghidupkan manipulasi obyek-terorientasi atas koleksi, PRADO menyediakan kelas koleksi yang bertenaga. Diantaranya, TList dan TMap adalah yang paling mendasar dan biasanya melayani sebagai basis kelas untuk kelas koleksi lainnya. Karena banyak komponen PRADO memiliki properti yang bertipe koleksi, penting bagi para pengembang untuk menguasai pemakaian kelas koleksi PRADO.

Menggunakan TList

Obyek TList mewakili array berindeks-kardinal, misalnya array (obyek) dengan indeks 0, 1, 2, ...

TList bisa dipakai seperti array PHP. Sebagai contoh,

$list=new TList; // buat obyek list ... $item=$list[$index]; // baca item pada indeks yang ditetapkan $list[]=$item; // tambah item di akhir $list[$index]=$item; // ganti item pada indeks yang ditetapkan unset($list[$index]); // hapus item di posisi $index if(isset($list[$index])) // uji apakah daftar memiliki item di posisi $index foreach($list as $index=>$item) // jelajahi setiap item dalam daftar

Untuk memperoleh jumlah item dalam daftar, gunakan properti Count. Catatan, jangan gunakan count($list), karena ia selalu mengembalikan 1.

Sebagai tambahan, TList menerapkan beberapa metode yang nyaman untuk dipakai secara umum guna memanipulasi data dalam sebuah daftar. Ini termasuk

Menggunakan properti komponen berbasis-TList

Seperti telah disebutkan di atas, banyak properti komponen PRADO didasarkan pada TList atau kelas koleksi berasal dari TList. Properti ini semuanya berbagi pemakaian tersebut di atas.

Sebagai contoh, TControl (basis kelas untuk semua kontrol PRADO) mempunyai properti yang disebut Controls yang mewakili koleksi dari kontrol anak. Tipe Controls adalah TControlCollection yang memperluas TList. Oleh karena itu, untuk menambahkan kontrol anak baru, kita dapat menggunakan cara berikut,

$control->Controls[]=$newControl;

Untuk menjelajahi melalui kontrol anak, kita bisa menggunakan,

foreach($control->Controls as $childControl) ...

Controh lain adalah properti Items, tersedia dalam kontrol list, TRepeater, TDataList dan TDataGrid. Dalam kontrol ini, kelas leluhur dari Items adalah TList.

Memperluas TList

Seringkali kita ingin memperluas TList untuk melakukan operasi tambahan untuk setiap penambahan atau penghapusan sebuah item. Satu-satunya metode yang diperlukan kelas anak untuk mengganti adalah insertAt() dan removeAt(). Sebagai contoh, guna memastikan daftar hanya berisi item yang bertipe TControl, kita dapat mengganti insertAt() sebagai berikut,

public function insertAt($index,$item) { if($item instanceof TControl) parent::insertAt($index,$item) else throw new Exception('TControl required.'); }

Menggunakan TMap

Obyek TMap mewakili tabel campuran (atau kami katakan array berindeks-string).

Mirip dengan TList, TMap bisa dipakai layaknya sebuah array,

$map=new TMap; // buat obyek map ... $map[$key]=$value; // tambah pasangan kunci-nilai unset($map[$key]); // hapus nilai dengan kunci yang ditetapkan if(isset($map[$key])) // apakah map berisi kunci foreach($map as $key=>$value) // jelajahi item dalam map

Properti Count memberikan jumlah item dalam map sementara properti Keys mengembalikan daftar kunci yang dipakai dalam map.

Metode berikut disediakan oleh TMap demi kenyamanan,

Penggunaan TAttributeCollection

TAttributeCollection adalah kelas khusus yang diperluas dari TMap. Ia dipakai terutama oleh properti Attributes dari TControl.

Selain fungsionalitas normal yang disediakan oleh TMap, TAttributeCollection membolehkan anda untuk mendapatkan dan menyetel item koleksi seperti mendapatkan dan menyetel properti. Sebagai contoh,

$collection->Label='value'; // sama dengan: $collection['Label']='value'; echo $collection->Label; // sama dengan: echo $collection['Label'];

Catatan, dalam $collection di atas TIDAK mempunyai properti Label.

Tidak seperti TMap, kunci dalam TAttributeCollection tidak sensitif huruf. Oleh karena itu $collection->Label sama dengan $collection->LABEL.

Karena fitur baru di atas, ketika berhadapan dengan properti Attributes dari kontrol, kita dapat mengambil keuntungan dari konsep subproperti dan mengkonfigurasi nilai atribut kontrol dalam sebuah template seperti berikut,

<com:TButton Attributes.onclick="if(!confirm('Are you sure?')) return false;" .../>

yang menambahkan atribut bernama onclick ke kontrol TButton.