Jadual Kandungan
SPL bermaksud perpustakaan php standard. Ia adalah satu set antara muka dan kelas yang direka untuk menyelesaikan masalah biasa. SPL menyediakan banyak struktur data, antara muka, dan pengecualian yang boleh digunakan untuk mengendalikan tugas kompleks dengan lebih cekap. Ia penting kerana ia dapat membantu mengurangkan jumlah kod yang anda perlukan untuk menulis, meningkatkan prestasi, dan menjadikan kod anda lebih mudah untuk dibaca dan diselenggara.
Iterator SPL digunakan untuk melangkah ke atas set data. Untuk menggunakan Iterator SPL, anda perlu membuat contoh kelas Iterator. Anda kemudian boleh melangkah melalui koleksi menggunakan kaedah iterator. Sebagai contoh, anda boleh menggunakan kaedah
Terdapat banyak jenis pengiklan SPL, masing -masing direka untuk tujuan tertentu. Beberapa contoh termasuk ArrayIterator (untuk melelehkan tatasusunan);
Bagaimana untuk menapis data menggunakan Iterator SPL?
Bagaimana untuk menyusun data menggunakan Iterator SPL?
Apakah pengecualian SPL dan bagaimana anda menggunakannya?
Bagaimana cara membaca dan menulis fail menggunakan SPL?
Bagaimana menggunakan SPL untuk memproses direktori?
Bagaimana menggunakan SPL untuk memproses tatasusunan?
Bagaimana menggunakan SPL untuk memproses struktur data?
Rumah pembangunan bahagian belakang tutorial php Menggunakan Iterator SPL, Bahagian 1

Menggunakan Iterator SPL, Bahagian 1

Feb 27, 2025 am 10:14 AM

Using SPL Iterators, Part 1

mata teras

    Penyesuaian adalah proses umum untuk melintasi senarai nilai dalam pengaturcaraan. Dalam PHP, iterator adalah objek yang melintasi senarai, seperti array, senarai direktori, atau set hasil pangkalan data.
  • Perpustakaan PHP standard (SPL) menyediakan sejumlah besar iterator yang menjadikan kod itu lebih cekap dan boleh dibaca. Menggunakan pemalsuan SPL sangat berfaedah apabila berurusan dengan sejumlah besar data atau struktur kompleks di luar tatasusunan mudah.
  • ArrayIterator dan RecursiveArrayIterator adalah dua iterator SPL yang digunakan untuk melangkah ke atas tatasusunan. ArrayIterator digunakan untuk tatasusunan satu dimensi, dan recursiveArrayIterator digunakan untuk susunan multidimensi.
  • DirectoryIterator dan RecursiveDirectoryIterator adalah Iterator SPL yang digunakan untuk melintasi senarai direktori. DirectoryIterator boleh digunakan untuk melangkah ke atas direktori, manakala RecursiveDirectoryIterator digunakan untuk melintasi direktori secara rekursif.
Saya merasakan sedikit terkejut apabila saya mula -mula bersentuhan dengan istilah "lelaran" dan melihat banyak kategori yang berkaitan dengannya di SPL. Lelaran nampaknya terlalu rumit untuk difahami. Tetapi saya tidak lama lagi menyedari bahawa ia hanyalah pernyataan operasi yang cantik yang kami lakukan. Jika anda menggunakan PHP, anda mungkin menggunakan tatasusunan. Jika anda telah menggunakan array, anda sudah pasti berulang melalui unsur -unsurnya. Melihat mana -mana kod, anda hampir pasti dapat mencari gelung

. Ya, lelaran hanyalah proses melintasi senarai nilai. Iterator adalah objek yang melintasi senarai, yang boleh menjadi array, senarai direktori, atau set hasil pangkalan data. Di bahagian pertama siri ini, saya akan memperkenalkan anda kepada lelaran dan bagaimana untuk memanfaatkan beberapa kelas terbina dalam dalam Perpustakaan PHP Standard (SPL). SPL mengandungi sebilangan besar iterator, menggunakannya dalam kod anda boleh meningkatkan kecekapan kod dan, dalam kebanyakan kes, membuat kod lebih mudah dibaca. foreach

kapan dan mengapa menggunakan iterator spl

Seperti yang anda lihat, objek iterator iterative pada dasarnya sama dengan array berulang, begitu banyak orang ingin tahu sama ada lebih mudah untuk melekat dengan array pada mulanya. Walau bagaimanapun, kelebihan sebenar iterator adalah ketika melintasi sejumlah besar data atau data yang lebih kompleks daripada array mudah. Gelung

salinan mana -mana array yang diserahkan kepadanya. Jika anda bekerja pada sejumlah besar data, anda akan menyalinnya setiap kali anda menggunakan array yang besar dalam gelung, yang mungkin tidak diingini. Iterator SPL merangkumi senarai dan mendedahkan penglihatan hanya satu elemen pada satu masa, menjadikannya lebih efisien. Iterator adalah pembinaan yang baik apabila membuat penyedia data, kerana ia membolehkan anda melambatkan pemuatan data. Memuatkan malas di sini hanya mengambil data yang diperlukan apabila diperlukan. Anda juga boleh memanipulasi (penapis, menukar, dan lain -lain) data yang diproses sebelum menjadikannya tersedia kepada pengguna. Walau bagaimanapun, keputusan untuk menggunakan iterator sentiasa mengikut budi bicara anda. Terdapat banyak manfaat untuk iterators, tetapi dalam beberapa kes (seperti set array yang lebih kecil), ia boleh membawa kepada overhead yang tidak perlu. Bila menggunakannya terpulang kepada anda; foreach foreach

Arahan lelaran

Iterator pertama yang ingin saya perkenalkan kepada anda adalah ArrayIterator. Pembina mengambil array sebagai hujah dan menyediakan kaedah yang boleh digunakan untuk melintasinya. Berikut adalah contoh:

<?php
// 一个数组(使用PHP 5.4的新简写法)
$arr = ["sitepoint", "phpmaster", "buildmobile", "rubysource",
    "designfestival", "cloudspring"];

// 创建一个新的ArrayIterator并传入数组
$iter = new ArrayIterator($arr);

// 遍历对象
foreach ($iter as $key => $value) {
    echo $key . ":  " . $value . "<br></br>";
}
Salin selepas log masuk
Salin selepas log masuk

output kod di atas adalah:

<code>0: sitepoint
1: phpmaster
2: buildmobile
3: rubysource
4: designfestival
5: cloudspring</code>
Salin selepas log masuk
Salin selepas log masuk

Biasanya, anda akan menggunakan ArrayObject (kelas yang membolehkan anda memproses objek sebagai tatasusunan dalam konteks tertentu) dan bukannya menggunakan ArrayIterator secara langsung. Apabila anda menggunakan gelung foreach atau panggilan ArrayIterator :: getIterator () secara langsung, ia secara automatik akan membuat arrayIterator untuk anda. Perhatikan bahawa sementara ArrayObject dan ArrayIterator berkelakuan seperti array dalam konteks ini, mereka masih objek; ArrayIterator mudah digunakan, tetapi hanya untuk tatasusunan satu dimensi. Kadang -kadang anda mempunyai pelbagai multidimensi dan anda ingin berulang -ulang meleleh melalui array bersarang. Dalam kes ini, anda boleh menggunakan RecursiveArrayIterator. Senario yang biasa adalah untuk bersarang sort() gelung atau membuat fungsi rekursif untuk memeriksa semua item dalam pelbagai multidimensi. Contohnya: array_keys() foreach output kod di atas adalah:

<?php
// 一个多维数组
$arr = [
    ["sitepoint", "phpmaster"],
    ["buildmobile", "rubysource"],
    ["designfestival", "cloudspring"],
    "not an array"
];

// 遍历对象
foreach ($arr as $key => $value) {
    // 检查数组
    if (is_array($value)) {
        foreach ($value as $k => $v) {
            echo $k . ": " . $v . "<br></br>";
        }
    } else {
        echo $key . ": " . $value . "<br></br>";
    }
}
Salin selepas log masuk
Salin selepas log masuk

Cara yang lebih elegan adalah menggunakan RecursiveArrayIterator:

<code>0: sitepoint
1: phpmaster
0: buildmobile
1: rubysource
0: designfestival
1: cloudspring
3: not an array</code>
Salin selepas log masuk
Salin selepas log masuk

output adalah sama seperti dalam contoh sebelumnya. Perhatikan bahawa anda perlu membuat contoh recursiveIterator di sini dan lulus ke objek RecursiveArrayIterator, jika tidak, anda hanya akan mendapat nilai dalam array akar (dan banyak pemberitahuan yang dihasilkan berdasarkan tetapan anda). Apabila bekerja dengan tatasusunan pelbagai dimensi, anda harus menggunakan RecursiveArrayIterator kerana ia membolehkan anda meleleh melalui entri semasa, tetapi ia bergantung kepada anda melakukannya sendiri. RecursiveIteratorerator adalah penghias yang melakukan ini untuk anda. Ia mengambil recursiveArrayIterator, melangkah ke atasnya dan melangkah ke atas mana -mana penyertaan yang boleh didapati (dan sebagainya). Pada asasnya, ia "flat" recursiveArrayIterator. Anda boleh mendapatkan kedalaman lelaran semasa untuk menjejaki dengan memanggil recursiveIteratorerator :: getDepth (). Walau bagaimanapun, jika anda ingin mengembalikan objek, berhati -hati untuk menggunakan RecursiveArrayIterator dan RecursiveIteratorerator;

<?php
...
$iter = new RecursiveArrayIterator($arr);

// 遍历对象
// 我们需要创建一个RecursiveIteratorIterator实例
foreach (new RecursiveIteratorIterator($iter) as $key => $value) {
    echo $key . ": " . $value . "<br></br>";
}
Salin selepas log masuk
Salin selepas log masuk

Senarai direktori iTeration

Anda pasti perlu melangkah ke atas direktori dan failnya pada satu ketika dan anda boleh melakukan ini menggunakan fungsi terbina dalam yang disediakan oleh PHP (seperti atau

), tetapi anda juga boleh menggunakan direktorierator. Dalam bentuk yang paling mudah, DirectoryIterator sangat kuat, tetapi ia juga boleh disublassa dan dipertingkatkan. Berikut adalah contoh melelehkan direktori menggunakan direktorierator:

scandir() glob() output jelas bergantung pada jalan yang anda nyatakan dan kandungan direktori. Contohnya:

<?php
// 创建新的DirectoryIterator对象
$dir = new DirectoryIterator("/my/directory/path");

// 遍历目录列表
foreach ($dir as $item) {
    echo $item . "<br></br>";
}
Salin selepas log masuk
Jangan lupa bahawa untuk DirectoryIterator dan banyak Iterator SPL lain yang anda boleh menggunakan pengecualian untuk mengendalikan sebarang kesilapan.

<?php
// 一个数组(使用PHP 5.4的新简写法)
$arr = ["sitepoint", "phpmaster", "buildmobile", "rubysource",
    "designfestival", "cloudspring"];

// 创建一个新的ArrayIterator并传入数组
$iter = new ArrayIterator($arr);

// 遍历对象
foreach ($iter as $key => $value) {
    echo $key . ":  " . $value . "<br></br>";
}
Salin selepas log masuk
Salin selepas log masuk
<code>0: sitepoint
1: phpmaster
2: buildmobile
3: rubysource
4: designfestival
5: cloudspring</code>
Salin selepas log masuk
Salin selepas log masuk

Gunakan banyak kaedah lain seperti DirectoryIterator :: iSdot (), DirectoryIterator :: GetType (), dan DirectoryIterator :: GetSize (), hampir semua keperluan maklumat direktori asas anda. Anda juga boleh menggabungkan direktori dengan penapis atau regexiterator untuk mengembalikan fail yang sepadan dengan keadaan tertentu. Contohnya:

<?php
// 一个多维数组
$arr = [
    ["sitepoint", "phpmaster"],
    ["buildmobile", "rubysource"],
    ["designfestival", "cloudspring"],
    "not an array"
];

// 遍历对象
foreach ($arr as $key => $value) {
    // 检查数组
    if (is_array($value)) {
        foreach ($value as $k => $v) {
            echo $k . ": " . $v . "<br></br>";
        }
    } else {
        echo $key . ": " . $value . "<br></br>";
    }
}
Salin selepas log masuk
Salin selepas log masuk
SPL juga menyediakan recursiveDirectoryIterator, yang digunakan dengan cara yang sama seperti RecursiveArrayIterator. Fungsi yang secara rekursive melintasi direktori sering mengandungi banyak cek bersyarat untuk memeriksa direktori dan fail yang sah, sementara RecursiveDirectoryIterator boleh melakukan sebahagian besar kerja untuk anda, menghasilkan kod bersih. Walau bagaimanapun, terdapat amaran. RecursivedirectoryIterator tidak mengembalikan direktori kosong;

<code>0: sitepoint
1: phpmaster
0: buildmobile
1: rubysource
0: designfestival
1: cloudspring
3: not an array</code>
Salin selepas log masuk
Salin selepas log masuk
output saya serupa dengan:

<?php
...
$iter = new RecursiveArrayIterator($arr);

// 遍历对象
// 我们需要创建一个RecursiveIteratorIterator实例
foreach (new RecursiveIteratorIterator($iter) as $key => $value) {
    echo $key . ": " . $value . "<br></br>";
}
Salin selepas log masuk
Salin selepas log masuk

Ringkasan

Harap anda sekarang menyedari bahawa lelaran tidak begitu rumit seperti yang saya fikirkan pada mulanya, ia adalah sesuatu yang kita lakukan setiap hari. Dalam artikel ini, saya telah memperkenalkan lelaran dan beberapa kelas yang disediakan oleh SPL untuk menjadikan lelaran lebih mudah dan lebih mantap. Sudah tentu, saya hanya berurusan dengan sebahagian kecil daripada sampel kelas yang ada; SPL adalah perpustakaan "standard". Kadang -kadang anda mungkin mendapati kelas ini terlalu umum dan mereka mungkin tidak selalu memenuhi keperluan anda. Dalam kes ini, anda boleh dengan mudah melanjutkan kelas ini untuk menambah fungsi anda sendiri atau untuk menyesuaikan fungsi sedia ada seperti yang diperlukan. Di bahagian seterusnya siri ini, saya akan menunjukkan kepada anda cara menggunakan antara muka SPL untuk membuat kelas tersuai anda sendiri yang boleh dilalui dan diakses seperti array.

gambar dari Mushakesa / Shutterstock

Soalan Lazim Mengenai Menggunakan Iterator SPL

Apa yang dimaksudkan dalam PHP dan mengapa ia penting?

SPL bermaksud perpustakaan php standard. Ia adalah satu set antara muka dan kelas yang direka untuk menyelesaikan masalah biasa. SPL menyediakan banyak struktur data, antara muka, dan pengecualian yang boleh digunakan untuk mengendalikan tugas kompleks dengan lebih cekap. Ia penting kerana ia dapat membantu mengurangkan jumlah kod yang anda perlukan untuk menulis, meningkatkan prestasi, dan menjadikan kod anda lebih mudah untuk dibaca dan diselenggara.

Bagaimana menggunakan Iterator SPL dalam PHP?

Iterator SPL digunakan untuk melangkah ke atas set data. Untuk menggunakan Iterator SPL, anda perlu membuat contoh kelas Iterator. Anda kemudian boleh melangkah melalui koleksi menggunakan kaedah iterator. Sebagai contoh, anda boleh menggunakan kaedah

untuk mendapatkan item semasa, gunakan kaedah

untuk bergerak ke item seterusnya, dan gunakan kaedah current() untuk memeriksa sama ada terdapat lebih banyak item untuk melangkah ke atas. next() valid() Apakah beberapa contoh pengiklan SPL?

Terdapat banyak jenis pengiklan SPL, masing -masing direka untuk tujuan tertentu. Beberapa contoh termasuk ArrayIterator (untuk melelehkan tatasusunan);

Bagaimana untuk menapis data menggunakan Iterator SPL?

anda boleh menapis data dengan menggunakan kelas penapis. Kelas ini membolehkan anda menentukan penapis tersuai yang digunakan untuk setiap item dalam koleksi. Hanya item yang melalui penapis akan dikembalikan oleh Iterator.

Bagaimana untuk menyusun data menggunakan Iterator SPL?

Anda boleh menyusun data dengan menggunakan kelas ArrayObject. Kelas ini menyediakan kaedah asort() untuk menyusun item dalam koleksi. Anda juga boleh menggunakan kaedah uasort() untuk menyusun item menggunakan fungsi perbandingan tersuai.

Apakah pengecualian SPL dan bagaimana anda menggunakannya?

Pengecualian SPL adalah jenis pengecualian yang direka khas untuk SPL. Mereka menyediakan cara untuk menangani kesilapan yang berlaku semasa menggunakan SPL. Untuk menggunakan pengecualian SPL, anda hanya membuangnya ke dalam blok try dan menangkapnya di blok catch.

Bagaimana cara membaca dan menulis fail menggunakan SPL?

Anda boleh menggunakan kelas SplfileObject untuk membaca dan menulis fail. Kelas ini menyediakan kaedah untuk membuka, membaca, menulis, dan menutup fail. Ia juga menyediakan kaedah untuk memindahkan petunjuk fail dan memeriksa sama ada akhir fail telah dicapai.

Bagaimana menggunakan SPL untuk memproses direktori?

Anda boleh menggunakan kelas direktori untuk memproses direktori. Kelas ini menyediakan kaedah untuk membuka direktori, membaca kandungannya, dan menutup direktori. Ia juga menyediakan kaedah untuk memeriksa sama ada fail adalah direktori dan untuk mendapatkan saiz, jenis, dan masa pengubahsuaian fail.

Bagaimana menggunakan SPL untuk memproses tatasusunan?

Anda boleh menggunakan kelas ArrayObject dan ArrayIterator untuk memproses tatasusunan. Kelas -kelas ini menyediakan kaedah untuk membuat array, menambah item kepadanya, mengeluarkan item daripadanya, dan melangkah ke atas itemnya. Mereka juga menyediakan kaedah untuk menyusun tatasusunan dan memeriksa jika item wujud dalam array.

Bagaimana menggunakan SPL untuk memproses struktur data?

Anda boleh menggunakan pelbagai kelas struktur data yang disediakan oleh SPL untuk memproses struktur data. Kelas -kelas ini termasuk splstack, splqueue, splheap, dan splpriorityqueue. Setiap kelas menyediakan kaedah untuk mewujudkan struktur data, menambah item kepadanya, mengeluarkan item daripadanya, dan melangkah ke atas itemnya.

Atas ialah kandungan terperinci Menggunakan Iterator SPL, Bahagian 1. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara debug mod CLI dalam phpstorm? Bagaimana cara debug mod CLI dalam phpstorm? Apr 01, 2025 pm 02:57 PM

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Mar 31, 2025 pm 11:54 PM

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Bagaimana cara menghantar permintaan pos yang mengandungi data JSON menggunakan perpustakaan php curl? Bagaimana cara menghantar permintaan pos yang mengandungi data JSON menggunakan perpustakaan php curl? Apr 01, 2025 pm 03:12 PM

Menghantar data JSON menggunakan perpustakaan Curl PHP dalam pembangunan PHP, sering kali perlu berinteraksi dengan API luaran. Salah satu cara biasa ialah menggunakan perpustakaan curl untuk menghantar post ...

See all articles