PHP adalah bahasa pemrograman jaringan yang efisien. Karena keunggulan penulisan yang fleksibel dan pengoperasian yang cepat, PHP dengan cepat menjadi bahasa pilihan bagi pemrogram Web. Survei resmi belum lama ini menunjukkan bahwa 31,6% situs web sekarang menggunakan PHP sebagai bahasa pemrograman sisi server utama.
Namun, tidak mudah untuk menjadi master pemrograman PHP. Tidak seperti yang dibayangkan banyak orang, selama Anda dapat dengan cepat menulis beberapa kode sederhana untuk menyelesaikan masalah yang kompleks, Anda adalah seorang ahli pemrograman PHP. Seorang master PHP sejati juga perlu mempertimbangkan banyak masalah lainnya. Tiga pedoman berikut ini adalah pedoman yang harus diikuti terlebih dahulu oleh seorang programmer PHP dewasa dalam pemrograman.
1. Kemalasan adalah emas
2. Menulis kode yang indah
3. Mengejar kecepatan pemrograman, bukan kecepatan pemrograman
1. Kemalasan adalah emas
Apakah Anda seorang programmer yang malas? Ide ini sangat aneh! Karena mungkin orang tersibuk di dunia adalah programmer komputer. Namun justru karena programmer terlalu sibuk maka mereka harus belajar menjadi malas saat memprogram.
Bagi seorang programmer, ada dua cara malas: Pertama, dengan berani menggunakan kode program orang lain yang sudah jadi dan mengintegrasikan kode-kode tersebut ke dalam program atau proyek Anda sendiri. Yang kedua adalah menulis beberapa kode berguna untuk membangun perpustakaan fungsi, yang dapat dengan mudah digunakan saat menulis program di masa depan. Hal ini menghemat banyak pekerjaan yang berulang dan tentu saja membuat Anda tidak terlalu malas.
Kedua metode malas ini sangat cocok untuk programmer PHP.
Pertama-tama, PHP adalah bahasa yang lahir dan tumbuh di lingkungan yang bebas dan terbuka. Ada ribuan programmer di seluruh dunia yang terus-menerus berjuang untuk kesempurnaan PHP, dan mereka juga bersedia berbagi kecerdikan dan kode yang mereka tulis dengan orang lain. Anda dapat menemukan banyak kode program bagus setiap hari dari beberapa situs web PHP, milis, dan grup berita. Dengan mengatakan ini, saya tidak mendorong Anda untuk menunggu sepanjang hari sampai orang lain menulis kode untuk Anda, tetapi Anda dapat "berdiri di atas bahu orang-orang hebat" dan sepenuhnya mempromosikan "doktrin penggunaan". Penerapan cerdas kode program orang lain bisa menghemat banyak uang. Kedua, di PHP, Anda dapat dengan mudah membuat pustaka fungsi Anda sendiri, yang dapat menghemat banyak masalah saat menulis program di masa mendatang.
Penulis di bawah ini memperkenalkan beberapa fungsi umum kepada Anda. Beberapa fungsi ini berasal dari beberapa proyek sumber terbuka di Internet, dan beberapa dipilih dari milis. Jika Anda dapat menambahkannya ke perpustakaan Anda sendiri, cepat atau lambat Anda akan mendapat manfaat darinya.
1. Fungsi pemrosesan database umum
Dibandingkan dengan fungsi CGI lainnya, salah satu kelebihan PHP adalah memiliki kemampuan pemrosesan database yang sangat kuat. Namun, dalam PHP, beberapa fungsi spesifik digunakan untuk menangani database yang berbeda, dan terdapat kekurangan pada fungsi pemrosesan database umum. Hal ini sangat mengurangi portabilitas kode program, yang juga membawa banyak ketidaknyamanan bagi teman-teman pemrograman pemula.
Di Internet, banyak pemrogram yang memecahkan masalah ini dengan mengenkapsulasi kelas. Mereka menulis fungsi terpadu untuk menangani database populer apa pun - apakah itu Mysql, yang populer di dunia Linux, atau SqlServer, yang sangat populer di platform Windows. Secara pribadi saya sangat suka menggunakan fungsi-fungsi ini, karena Anda bisa langsung menggunakan beberapa fungsi sederhana seperti "query" dan "next_record" tanpa harus mempertimbangkan hal-hal rumit seperti koneksi database dan handle database, apalagi Pertimbangkan database apa yang Anda gunakan. .
Jika Anda memerlukan fungsi-fungsi ini, Anda bisa mendapatkannya dengan mengunjungi URL berikut:
http://phplib.netuse.de/
http://phpclasses.UpperDesign.com/browse.html/package/20
http://phpdb.linuxbox.com/
http://www.phpchina.com
2. Fungsi debugging variabel
Debugging program PHP selalu memusingkan. Ia tidak memiliki lingkungan kompilasi dan debugging yang terintegrasi seperti bahasa tingkat tinggi seperti VB, juga tidak memiliki kemampuan untuk digunakan dalam program PHP seperti Perl. Dijalankan langsung di lingkungan Linux atau DOS. Faktanya, kita dapat menyelesaikan debugging PHP dengan menggunakan pernyataan echo secara fleksibel.
Fungsi berikut memungkinkan Anda memeriksa jenis dan nilai variabel apa pun dalam program kapan saja.
fungsi ss_array_as_string (&$array, $kolom = 0) {
$str = "Array( n";
while(daftar($var, $val) = masing-masing($array)){
untuk ($i = 0; $i < $kolom+1; $i++){
$str .= " ";
}
$str .= $var.==> ;
$str .= ss_as_string($val, $kolom+1)." n";
}
untuk ($i = 0; $i < $kolom; $i++){
$str .= " ";
}
kembalikan $str.);
}
function ss_object_as_string (&$objek, $kolom = 0) {
if (kosong($objek->nama kelas)) {
kembalikan "$objek";
} kalau tidak {
$str = $objek->nama kelas."( n";
while (daftar(,$var) = masing-masing($objek->persistent_slots)) {
untuk ($i = 0; $i < $kolom; $i++){
$str .= " ";
}
global$$var;
$str .= $var.==> ;
$str .= ss_as_string($$var, kolom+1)." n";
}
untuk ($i = 0; $i < $kolom; $i++){
$str .= " ";
}
kembalikan $str.);
}
}
fungsi ss_as_string (&$benda, $kolom = 0) {
jika (adalah_objek($benda)) {
return ss_object_as_string($benda, $kolom);
}
elseif (is_array($benda)) {
return ss_array_as_string($sesuatu, $kolom);
}
elseif (adalah_double($sesuatu)) {
kembalikan "Ganda(".$benda.")";
}
elseif (adalah_panjang($benda)) {
return "Panjang(".$sesuatu.")";
}
elseif (adalah_string($sesuatu)) {
kembalikan "String(".$benda.")";
}
kalau tidak {
kembalikan "Tidak Diketahui(".$sesuatu.")";
}
}
Bila diperlukan, cukup tambahkan kode berikut ke program untuk melihat tipe dan nilai variabel (termasuk array dan objek) yang digunakan dalam program:
echo ss_as_string($my_variable);
Dengan menggunakan pernyataan berikut, kita dapat langsung melihat nilai semua variabel dalam program:
echo ss_as_string($GLOBALS);
3. Fungsi yang mengontrol informasi Log
Cara penting lainnya untuk men-debug program PHP adalah dengan melihat informasi Log. Jika Anda dapat dengan mudah mengontrol tingkat informasi Log dan konten tampilan informasi Log, ini akan memberikan lebih banyak kemudahan untuk debugging program. Fungsi berikut dapat dengan mudah mengimplementasikan fungsi ini.
$ss_log_level = 0;
$ss_log_namafile = /tmp/ss-log;
$ss_log_levels = susunan(
TIDAK ADA => 0,
KESALAHAN => 1,
INFORMASI => 2,
DEBUG => 3);
fungsi ss_log_set_level ($level = KESALAHAN) {
global $ss_log_level;
$ss_log_level = $tingkat;
}
fungsi ss_log ($level, $pesan) {
global $ss_log_level, $ss-log-nama file;
if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) {
//Jangan tampilkan informasi Log
kembali salah;
}
$fd = fopen($ss_log_namafile, "a+");
fputs($fd, $level. - [.ss_timestamp_pretty().] - .$message."n");
fclose($fd);
kembali benar;
}
fungsi ss_log_reset() {
global $ss_log_namafile;
@batalkan tautan($ss_log_namafile);
}
Pada fungsi di atas, terdapat empat variabel level Log. Saat menjalankan program PHP, informasi Log hanya dapat direkam dan ditampilkan ketika level Log lebih rendah dari nilai level yang telah ditetapkan. Misalnya, tambahkan pernyataan berikut ke dalam program:
ss_log_set_level(INFO);
Kemudian, ketika menjalankan program PHP, hanya informasi LOG level ERROR dan INFO yang dapat direkam dan ditampilkan, dan informasi level DEBUG diabaikan. Selain itu, kita juga dapat mengatur isi informasi yang ditampilkan dengan pernyataan berikut:
ss_log(ERROR, "tingkat pengujian ERROR");
ss_log(INFO, "INFO tingkat pengujian");
ss_log(DEBUG, "level pengujian DEBUG");
Anda juga dapat menggunakan pernyataan berikut untuk menghapus informasi LOG kapan saja:
ss_log_reset();
4. Fungsi tes kecepatan
Untuk mengoptimalkan kode, kita memerlukan metode yang dapat menguji waktu berjalan kode untuk memilih kode yang optimal. Fungsi berikut dapat menguji waktu yang diperlukan untuk menjalankan kode:
function ss_timing_start ($name = default) {
global $ss_timing_start_times;
$ss_timing_start_times[$nama] = meledak( , microtime());
}
fungsi ss_timing_stop ($nama = default) {
global $ss_timing_stop_times;
$ss_timing_stop_times[$nama] = meledak(, microtime());
}
fungsi ss_timing_current ($nama = default) {
global $ss_timing_start_times, $ss_timing_stop_times;
if (!isset($ss_timing_start_times[$nama])) {
kembali 0;
}
if (!isset($ss_timing_stop_times[$nama])) {
$stop_time = meledak(, waktu mikro());
}
kalau tidak {
$stop_time = $ss_timing_stop_times[$nama];
}
$saat ini = $stop_time[1] - $ss_timing_start_times[$nama][1];
$saat ini += $stop_time[0] - $ss_timing_start_times[$nama][0];
kembalikan $saat ini;
}
Sekarang kita dapat dengan mudah memeriksa waktu eksekusi setiap bagian kode. Kita bahkan dapat menggunakan beberapa pengatur waktu secara bersamaan. Kita hanya perlu menyetel parameter yang berbeda sebagai nama pengatur waktu saat menggunakan fungsi di atas.
5. Debugging dan optimalisasi operasi database
Untuk database, kecepatan pengoperasian sangatlah penting. Meskipun banyak buku dan artikel mengajarkan metode untuk menjalankan database dengan cepat, semua metode harus diuji dalam praktik. Selanjutnya, kita akan menggabungkan fungsi query() di pustaka fungsi PHPLib dan fungsi yang diperkenalkan di atas untuk menulis fungsi query() baru Dibandingkan dengan fungsi aslinya, fungsi ini menambahkan fungsi pemantauan waktu berjalan.
fungsi kueri($Query_String, $halt_on_error = 1) {
$ini->sambung();
ss_timing_start();
$ini->Query_ID = @mysql_query($Query_String,$ini->Link_ID);
ss_timing_stop();
ss_log(INFO, ss_timing_current().Detik - .$Query_String);
$ini->Baris = 0;
$ini->Errno =mysql_errno();
$ini->Kesalahan =mysql_error();
if ($halt_on_error && !$ini->Query_ID) {
$ini->halt("SQL Tidak Valid: ".$Query_String);
}
kembalikan $ini->Query_ID;
}
2. Menulis kode yang indah
1. Pisahkan program back-end dari program front-end.
Saat menulis program PHP, beberapa kode digunakan untuk memproses beberapa transaksi, seperti pengoperasian database, melakukan operasi matematika, dll, sementara yang lain kode hanya untuk pemrosesan transaksi. Hasilnya ditampilkan, seperti beberapa kode PHP yang menggunakan pernyataan echo untuk menampilkan hasil dalam format HTML di browser Web dan kode HTML yang langsung tertanam dalam program PHP. Pertama-tama, kita harus membedakan dengan jelas antara kedua jenis kode ini, menyebut yang pertama sebagai program latar belakang dan yang kedua sebagai program front-end.
Karena PHP adalah bahasa pemrograman tertanam, artinya semua kode PHP dapat tertanam dalam kode HTML, yang memberikan banyak kemudahan dalam penulisan program. Namun jika terjadi hal yang ekstrim maka harus dibalik. Jika mencampurkan kode PHP dan kode HTML dalam suatu program yang panjang akan membuat program menjadi berantakan dan kurang baik untuk pemeliharaan dan pembacaan program. Oleh karena itu, kita perlu mentransplantasikan kode PHP yang dicampur dengan kode HTML dalam program ini sebanyak mungkin, merangkum kode-kode ini ke dalam fungsi dalam file khusus, dan kemudian menggunakan pernyataan include dalam kode HTML untuk memasukkan file-file ini di lokasi yang sesuai. Panggil saja fungsi-fungsi ini.
Di satu sisi, pendekatan ini membuat kode HTML dan kode PHP menjadi sederhana dan mudah dibaca. Di sisi lain, karena kode HTML perlu terus diperbarui, metode pemisahan ini dapat memastikan bahwa program latar belakang tidak akan dimusnahkan .
Berbeda dengan program front-end, program back-end mengejar stabilitas, struktur, dan jarang berubah, sehingga harus dirancang dan dikelola dengan hati-hati. Faktanya, ada gunanya menginvestasikan banyak waktu saat merancang program desktop. "Tanam pohon sekarang dan nikmati keteduhan nanti." Anda akan dapat dengan mudah menggunakan program latar belakang yang Anda tulis sekarang dalam pekerjaan desain di masa depan.
2. Penggunaan file penyertaan yang fleksibel
Seperti disebutkan sebelumnya, program latar belakang harus diatur dalam serangkaian file penyertaan. File yang disertakan dapat dimuat secara dinamis bila diperlukan melalui pernyataan include, atau dapat dimuat secara otomatis terlebih dahulu dengan menggunakan direktif auto_prepend_file di file php.ini.
Jika Anda menggunakan cara terakhir, meskipun Anda akan mendapatkan manfaatnya untuk selamanya, ada juga beberapa kekurangan yang patut kita perhatikan. Potongan kode berikut menunjukkan kepada kita berapa lama waktu yang dibutuhkan untuk mengurai file include yang besar:
require(timing.inc);
ss_timing_start();
include(test.inc);
ss_timing_stop();
gema
.ss_timing_current().
?>
Dalam kode di atas, test.inc adalah file penyertaan 1000 baris. Hasil yang dijalankan menunjukkan bahwa dibutuhkan 0,6 detik untuk mengurai file penyertaan ini.
Kerugian lain dari penggunaan file include adalah jika terjadi kesalahan pada pernyataan di suatu file, maka program PHP seluruh website tidak akan dapat dijalankan. Jadi gunakan dengan sangat hati-hati.
Faktanya, dengan sedikit pemrosesan pada file include, file include hanya dapat diurai bila diperlukan. Kode berikut menyebabkan file abc.inc diurai hanya ketika program memerlukannya:
if (didefinisikan(__LIBA_INC)) return;
definisikan(__LIBA_INC, 1);
/*
* Kode...
*/
?>
3. Gunakan metode pemrograman berorientasi objek
PHP juga merupakan bahasa berorientasi objek. Metode pemrograman berorientasi objek adalah metode desain perangkat lunak yang sangat dihormati oleh pemrogram ulung. Dalam pemrograman PHP, keunggulan bahasa berorientasi objek dapat dimanfaatkan sepenuhnya . Keuntungannya adalah untuk merangkum objek dalam pemrograman. Pada kode sebelumnya, kami menggunakan metode berorientasi objek. Misalnya, saat mengelola database, kami merangkum fungsi query() ke dalam kelas database, yang sangat memudahkan pengelolaan kode dan meningkatkan keterbacaan program.
3. Mengejar kecepatan program daripada kecepatan pemrograman.
Dalam pembuatan situs web, kecepatan menjalankan program dan kecepatan pengunduhan halaman web merupakan faktor penting yang menentukan keberhasilan atau kegagalan. Sebagai seorang programmer web, Anda harus lebih memperhatikan kecepatan menjalankan kode Anda. Beberapa metode yang diperkenalkan di bawah ini semuanya meningkatkan kecepatan berjalan kode ke tingkat yang berbeda-beda.
1. Gunakan kode HTML yang tertanam sebagai ganti pernyataan echo PHP.
Karena PHP adalah bahasa pemrograman Web tertanam, kode HTML dan kode PHP dapat disematkan satu sama lain. Namun, banyak pemrogram khawatir bahwa penggunaan "" yang berlebihan untuk menyematkan kode PHP dalam kode HTML akan memanggil juru bahasa PHP berkali-kali, sehingga mengurangi kecepatan berjalan kode PHP. Oleh karena itu, mereka lebih memilih menggunakan pernyataan echo PHP untuk mengeluarkan kode HTML langsung Gunakan kode HTML. Namun kenyataannya justru sebaliknya. Setiap halaman PHP hanya memanggil juru bahasa PHP satu kali untuk menafsirkan semua kode PHP. Oleh karena itu, menyematkan kode PHP hanya jika diperlukan, dan sering kali langsung menggunakan kode HTML untuk memasukkan hasil, tidak hanya tidak akan mengurangi kecepatan berjalan program, tetapi juga tidak akan mengurangi kecepatan berjalan program. juga Karena penguraian pernyataan gema berkurang, kecepatan menjalankan kode sering kali dapat ditingkatkan.
Potongan kode berikut menunjukkan kesimpulan kami. Dalam kode ini, kami menggunakan fungsi tes waktu yang diperkenalkan sebelumnya.
Gunakan str-replace daripada ereg-replace
Pemrogram yang terbiasa pemrograman di Perl lebih bersedia menggunakan ereg_replace untuk menyelesaikan pekerjaan penggantian string, karena penggunaan ereg_replace di PHP mirip dengan penggunaan pencocokan pola di Perl. Namun, kode berikut membuktikan bahwa menggunakan str_replace daripada ereg_replace akan sangat meningkatkan kecepatan menjalankan kode.
Uji kecepatan lari str_replace dan ereg_replace
//Kode ini menguji kecepatan lari str_replace
penekanan;?>
untuk ($i=0; $i<1000; $i++) {
str_replace(i>, b>, $string).
}
?>
//Kode ini menguji kecepatan lari ereg_replace
untuk ($i=0; $i<1000; $i++) {
ereg_replace(<([/]*)i>, <1b>, $string).
}
?>
//Cetak
kesimpulan
hasilmenggunakan waktu str_replace -
Saatnya menggunakan ereg_pattern -
menjalankan kode di atas, hasilnya:
saat menggunakan str_replace - 0,089757
Saatnya menggunakan ereg_pattern - 0.248881
Dari hasil yang berjalan, kita dapat melihat bahwa menggunakan str_replace alih-alih ereg_replace sebagai fungsi penggantian string sangat meningkatkan kecepatan berjalan kode.
3. Perhatikan kutipan string.
PHP, seperti banyak bahasa pemrograman lainnya, dapat menggunakan tanda kutip ganda ("") untuk mengutip string, atau tanda kutip tunggal (). Namun di PHP, jika Anda menggunakan tanda kutip ganda untuk mengutip sebuah string, parser PHP akan menganalisis terlebih dahulu apakah ada referensi ke suatu variabel di dalam string tersebut. Jika ada variabel, maka variabel tersebut akan diganti. Jika ini adalah tanda kutip tunggal, maka tidak terlalu rumit - semua string yang diapit tanda kutip tunggal akan langsung ditampilkan. Jelasnya, dalam pemrograman PHP, lebih cepat menggunakan tanda kutip tunggal untuk mengutip variabel string daripada tanda kutip ganda.
4. Hindari penggunaan operasi gabungan dalam database
Dibandingkan dengan bahasa pemrograman Web lainnya, fungsi database PHP sangat kuat. Namun, menjalankan database dalam PHP masih merupakan hal yang sangat memakan waktu dan tenaga. Oleh karena itu, sebagai programmer Web, Anda harus meminimalkan operasi query database dan membuat indeks yang sesuai untuk database. Hal lain yang perlu diperhatikan adalah ketika menggunakan PHP untuk mengoperasikan database, usahakan untuk tidak menggunakan operasi gabungan beberapa tabel data. Meskipun operasi gabungan dapat meningkatkan fungsi kueri database, hal ini sangat menambah beban pada server.
Untuk mengilustrasikan masalah ini, kita dapat melihat contoh sederhana di bawah ini.
Kami membuat dua tabel data foo dan big_foo di database. Pada tabel data foo, hanya ada satu field yang berisi semua bilangan asli dari 1 sampai 1000. Tabel data big_foo juga hanya memiliki satu bidang, namun berisi semua bilangan asli dari 1 hingga 1.000.000. Jadi, dari segi ukuran, big_foo sama dengan foo digabungkan dengan dirinya sendiri.
$db->query("pilih * dari foo");
0,032273 detik
$db->catatan_berikutnya();
0,00048999999999999 detik
$db->query("masukkan ke nilai foo (NULL)");
0,019506 detik
$db->query("pilih * dari foo sebagai a, foo sebagai b");
17,280596 detik
$db->query("pilih * dari foo sebagai a, foo sebagai b dimana a.id > b.id");
14,645251 detik
$db->query("pilih * dari foo sebagai a, foo sebagai b dimana a.id = b.id");
0,041269 detik
$db->query("pilih * dari big_foo");
25.393672 detik
Dari hasil operasi di atas, kita dapat menemukan bahwa kecepatan penggabungan dua tabel data dengan 1.000 record tidak jauh lebih cepat dibandingkan operasi terpisah dari tabel data besar dengan 1.000.000 record.
5. Perhatikan perbedaan antara include dan require.
Dalam pemrograman PHP, include() dan require() memiliki fungsi yang sama, namun ada beberapa perbedaan dalam penggunaannya. include() adalah fungsi penyertaan bersyarat, sedangkan require() adalah yang tanpa syarat. Berisi fungsi. Misalnya, dalam contoh berikut, jika variabel $somgthing benar, file somefile akan disertakan:
if($something){
include("beberapa file");
}
Namun berapapun nilai $something yang dibutuhkan, kode berikut akan memasukkan file somefile ke dalam file:
if($something){
memerlukan("somefile");
}
Contoh menarik berikut ini menggambarkan perbedaan antara kedua fungsi tersebut.
$i = 1;
sementara ($i < 3) {
memerlukan("somefile.$i");
$i++;
}
Dalam kode ini, program akan menyertakan file yang sama setiap kali diulang. Jelas ini bukan niat awal programmer. Dari kode tersebut kita dapat melihat bahwa kode ini berharap untuk menyertakan file yang berbeda di setiap loop. Jika Anda ingin menyelesaikan fungsi ini, Anda harus beralih ke fungsi include():
$i = 1;
sementara ($i < 3) {
include("somefile.$i");
$i++;
}
6. Perhatikan perbedaan antara echo dan print.
Fungsi echo dan print di PHP pada dasarnya sama, namun ada sedikit perbedaan di antara keduanya. Anda dapat menggunakan print sebagai fungsi biasa dalam kode PHP. Misalnya, setelah mengeksekusi kode berikut, nilai variabel $res akan menjadi 1.
$ret = print "Hello World";
Ini berarti print dapat digunakan dalam beberapa ekspresi kompleks, namun echo tidak bisa. Demikian pula, pernyataan echo berjalan sedikit lebih cepat daripada pernyataan print dalam kode karena pernyataan echo tidak memerlukan nilai apa pun untuk dikembalikan.