Indonesian [Bahasa Indonesia] translation by ⚡ Rova Rindrata [you can also view the original English article]
Dua kali sebulan, kami meninjau kembali beberapa posting favorit pembaca kami dari sepanjang sejarah Nettuts+.
Bahkan setelah menggunakan PHP selama bertahun-tahun, kami menemukan fungsi dan fitur yang tidak kami ketahui. Beberapa darinya bisa sangat berguna, namun kurang dimanfaatkan. Dengan pemikiran tersebut, saya telah mengumpulkan daftar sembilan fungsi dan fitur PHP yang sangat berguna yang Anda harus mengetahuinya.
1. Fungsi dengan Jumlah Argumen yang Bebas
Anda mungkin sudah mengetahui bahwa PHP memungkinkan Anda mendefinisikan fungsi dengan argumen opsional. Tapi ada juga metode untuk mengizinkan jumlah argumen fungsi yang benar-benar bebas.
Pertama, berikut adalah contoh dengan argumen opsional saja:
// function with 2 optional arguments function foo[$arg1 = '', $arg2 = ''] { echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; } foo['hello','world']; /* prints: arg1: hello arg2: world */ foo[]; /* prints: arg1: arg2: */
Sekarang, mari kita lihat bagaimana kita bisa membangun sebuah fungsi yang menerima berbagai jumlah argumen. Kali ini kita akan memanfaatkan func_get_args[]:
// yes, the argument list can be empty function foo[] { // returns an array of all passed arguments $args = func_get_args[]; foreach [$args as $k => $v] { echo "arg".[$k+1].": $v\n"; } } foo[]; /* prints nothing */ foo['hello']; /* prints arg1: hello */ foo['hello', 'world', 'again']; /* prints arg1: hello arg2: world arg3: again */
2. Menggunakan Glob[] untuk Menemukan File
Banyak fungsi PHP yang memiliki nama panjang dan deskriptif. Namun mungkin akan sulit untuk menjelaskan apa yang dilakukan fungsi bernama glob[] kecuali Anda sudah akrab dengan kata tersebut dari tempat lain.
Anggap sebagai versi yang lebih mumpuni dari fungsi scandir[]. Ia membiarkan Anda mencari file dengan menggunakan pola.
// get all php files $files = glob['*.php']; print_r[$files]; /* output looks like: Array [ [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php ] */
Anda bisa mengambil beberapa tipe file seperti ini:
// get all php files AND txt files $files = glob['*.{php,txt}', GLOB_BRACE]; print_r[$files]; /* output looks like: Array [ [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php [4] => log.txt [5] => test.txt ] */
Perhatikan bahwa sebenarnya file bisa dikembalikan dengan path, tergantung pada query Anda:
$files = glob['../images/a*.jpg']; print_r[$files]; /* output looks like: Array [ [0] => ../images/apple.jpg [1] => ../images/art.jpg ] */
Jika Anda menginginkan path lengkap dari masing-masing file, Anda cukup menggunakan fungsi realpath[] pada nilai-nilai yang dikembalikan:
$files = glob['../images/a*.jpg']; // applies the function to each array element $files = array_map['realpath',$files]; print_r[$files]; /* output looks like: Array [ [0] => C:\wamp\www\images\apple.jpg [1] => C:\wamp\www\images\art.jpg ] */
3. Informasi Penggunaan Memori
Dengan mengamati penggunaan memori dari skrip, Anda dapat mengoptimalkan kode Anda lebih baik lagi.
PHP memiliki garbage collector dan memory manager yang cukup kompleks. Jumlah memori yang digunakan oleh skrip Anda. bisa naik dan turun selama eksekusi skrip. Untuk mendapatkan penggunaan memori saat ini, kita dapat menggunakan fungsi memory_get_usage[], dan untuk mendapatkan jumlah tertinggi dari memori yang digunakan pada setiap titik, kita dapat menggunakan fungsi memory_get_peak_usage[].
echo "Initial: ".memory_get_usage[]." bytes \n"; /* prints Initial: 361400 bytes */ // let's use up some memory for [$i = 0; $i < 100000; $i++] { $array []= md5[$i]; } // let's remove half of the array for [$i = 0; $i < 100000; $i++] { unset[$array[$i]]; } echo "Final: ".memory_get_usage[]." bytes \n"; /* prints Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage[]." bytes \n"; /* prints Peak: 13687072 bytes */
4. Informasi Penggunaan CPU
Untuk ini, kita akan memanfaatkan fungsi getrusage[]. Perlu diingat bahwa ini tidak tersedia pada platform Windows.
print_r[getrusage[]]; /* prints Array [ [ru_oublock] => 0 [ru_inblock] => 0 [ru_msgsnd] => 2 [ru_msgrcv] => 3 [ru_maxrss] => 12692 [ru_ixrss] => 764 [ru_idrss] => 3864 [ru_minflt] => 94 [ru_majflt] => 0 [ru_nsignals] => 1 [ru_nvcsw] => 67 [ru_nivcsw] => 4 [ru_nswap] => 0 [ru_utime.tv_usec] => 0 [ru_utime.tv_sec] => 0 [ru_stime.tv_usec] => 6269 [ru_stime.tv_sec] => 0 ] */
Mungkin itu terlihat sedikit samar kecuali Anda sudah memiliki latar belakang system administration. Berikut adalah penjelasan dari masing-masing nilai [Anda tidak perlu menghafalnya]
- ru_oublock: blokir operasi output
- ru_inblock: blok operasi input
- ru_msgsnd: pesan yang dikirim
- ru_msgrcv: pesan yang diterima
- ru_maxrss: menetapkan ukuran yang tetap tinggal maksimum
- ru_ixrss: ukuran berbagi memori integral
- ru_idrss: ukuran data yang tidak dibagi integral
- ru_minflt: pembaruan halaman
- ru_majflt: kesalahan halaman
- ru_nsignals: sinyal yang diterima
- ru_nvcsw: konteks switch sukarela
- ru_nivcsw: konteks switch disengaja
- ru_nswap: swap
- ru_utime.tv_usec: waktu yang digunakan pengguna [mikrodetik]
- ru_utime.tv_sec: waktu yang digunakan pengguna [detik]
- ru_stime.tv_usec: waktu yang digunakan sistem [mikrodetik]
- ru_stime.tv_usec: waktu yang digunakan sistem [detik]
Untuk melihat berapa banyak daya CPU yang telah dikonsumsi skrip ini, kita perlu melihat nilai-nilai 'user time' dan 'system time'. Porsi detik dan mikrodetik disediakan terpisah secara default. Anda dapat membagi nilai mikrodetik sebesar 1 juta, dan menambahkannya ke nilai detik, untuk mendapatkan total detik sebagai angka desimal.
Mari kita lihat contohnya:
// sleep for 3 seconds [non-busy] sleep[3]; $data = getrusage[]; echo "User time: ". [$data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000]; echo "System time: ". [$data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 1000000]; /* prints User time: 0.011552 System time: 0 */
Meskipun skrip butuh waktu sekitar 3 detik untuk berjalan, penggunaan CPU adalah sangat sangat rendah. Karena selama operasi sleep, skrip benar-benar tidak mengkonsumsi sumber daya CPU. Ada banyak tugas-tugas lainnya yang mungkin memakan waktu yang nyata, tapi mungkin tidak menggunakan waktu CPU, seperti menunggu operasi disk. Jadi seperti yang Anda lihat, penggunaan CPU dan panjang sebenarnya dari runtime tidak selalu sama.
Berikut adalah contoh yang lain:
// loop 10 million times [busy] for[$i=0;$i hello [1] => 42 [2] => Array [ [0] => 1 [1] => two ] [3] => apple ] */
Ini adalah metode serialisasi asli dari PHP. Namun, sejak JSON telah menjadi begitu populer dalam beberapa tahun terakhir, mereka memutuskan untuk menambahkan dukungan untuknya di PHP 5.2. Sekarang Anda dapat menggunakan fungsi json_encode[]
dan json_decode[]
juga:
// a complex array $myvar = array[ 'hello', 42, array[1,'two'], 'apple' ]; // convert to a string $string = json_encode[$myvar]; echo $string; /* prints ["hello",42,[1,"two"],"apple"] */ // you can reproduce the original variable $newvar = json_decode[$string]; print_r[$newvar]; /* prints Array [ [0] => hello [1] => 42 [2] => Array [ [0] => 1 [1] => two ] [3] => apple ] */
Ini lebih kompak, dan yang terbaik dari semuanya, kompatibel dengan javascript dan banyak bahasa lainnya. Namun, untuk objek-objek yang kompleks, beberapa informasi yang mungkin akan hilang.
8. Mengompresi String
Ketika berbicara tentang kompresi, kita biasanya berpikir tentang file, seperti arsip ZIP. Ini dimungkinkan untuk mengompres string panjang dalam PHP, tanpa melibatkan setiap file arsip.
Dalam contoh berikut kita akan menggunakan fungsi gzcompress[] dan gzuncompress[]:
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit lacus quis ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. Praesent ipsum diam, consectetur vitae ornare a, aliquam a nunc. In id magna pellentesque tellus posuere adipiscing. Sed non mi metus, at lacinia augue. Sed magna nisi, ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulla bibendum id euismod urna sodales. "; $compressed = gzcompress[$string]; echo "Original size: ". strlen[$string]."\n"; /* prints Original size: 800 */ echo "Compressed size: ". strlen[$compressed]."\n"; /* prints Compressed size: 418 */ // getting it back $original = gzuncompress[$compressed];
Kami mampu mencapai pengurangan ukuran hampir 50%. Juga fungsi gzencode[] dan gzdecode[] mencapai hasil yang sama, dengan menggunakan berbagai algoritma kompresi.
9. Mendaftarkan Fungsi Shutdown
Ada sebuah fungsi yang disebut register_shutdown_function[], yang akan mengijinkan Anda menjalankan beberapa kode yang tepat sebelum skrip selesai dijalankan.
Bayangkan bahwa Anda ingin menangkap beberapa acuan statistik pada akhir eksekusi skrip, seperti berapa lama waktu yang dibutuhkan untuk menjalankannya:
// capture the start time $start_time = microtime[true]; // do some stuff // ... // display how long the script took echo "execution took: ". [microtime[true] - $start_time]. " seconds.";
Pada awalnya ini mungkin tampak sepele. Anda hanya menambahkan kodenya ke bagian paling bawah dari skrip dan dijalankan sebelum selesai. Namun, jika Anda pernah memanggil fungsi exit[], kode itu tidak akan pernah berjalan. Juga, jika ada kesalahan fatal, atau jika skrip dihentikan oleh pengguna [dengan menekan tombol Stop di browser], lagi-lagi itu tidak dapat berjalan.
Ketika Anda menggunakan register_shutdown_function[], kode Anda akan mengeksekusi tidak peduli mengapa skrip ini telah berhenti berjalan:
$start_time = microtime[true]; register_shutdown_function['my_shutdown']; // do some stuff // ... function my_shutdown[] { global $start_time; echo "execution took: ". [microtime[true] - $start_time]. " seconds."; }
Kesimpulan
Apakah Anda menyadari fitur-fitur PHP lainnya yang tidak banyak diketahui tetapi dapat cukup berguna? Silakan berbagi dengan kami di komentar. Dan terima kasih untuk membaca!