Seperti disebutkan sebelumnya, PEAR mengelola basis kode aplikasi PEAR menurut kategori tertentu. Kode PEAR Anda dapat diatur ke dalam direktori yang sesuai, dan orang lain dapat dengan mudah mengambil dan membagikan hasil Anda. PEAR bukan hanya tempat penyimpanan kode, tetapi juga merupakan standar. Menggunakan standar ini untuk menulis kode PHP Anda akan meningkatkan keterbacaan dan penggunaan kembali program Anda serta mengurangi kemungkinan kesalahan. PEAR membangun kerangka kerja untuk Anda dengan menyediakan dua kelas yang mengimplementasikan fungsi seperti destruktor dan penangkap kesalahan. Anda dapat menggunakan fungsi ini melalui pewarisan.
Aturan pengkodean PEAR mencakup aturan indentasi, struktur kontrol, pemanggilan fungsi, definisi fungsi, komentar, kode yang disertakan, tag PHP, blok komentar header file, tag CVS, sampel URL, dan penamaan konstan. Berikut ini pengenalan singkatnya:
Aturan indentasi:
PEAR memerlukan 4 spasi untuk membuat indentasi kode, dan tidak ada TAB yang digunakan. Jika Anda menggunakan VIM, masukkan pengaturan berikut di ~/.vimrc Anda: setel expandtab
atur lebar shift=4
atur tabstop=4
Jika Anda menggunakan Emacs/XEmacs, Anda perlu mengatur mode indent-tabs ke nil.
Tetapi jika Anda suka menggunakan (X)Emacs untuk mengedit file PHP seperti saya, saya sangat menyarankan Anda untuk menginstal PHP-MODE sehingga ketika Anda menulis kode PEAR, secara otomatis akan menyesuaikan gaya indentasi Anda. Tentu saja, ada banyak PHP-MODE. MODE Fitur yang sangat bagus, Anda dapat mengunduh PHP-MODE versi terbaru dari daftar sumber daya.
Struktur kendali:
Struktur kontrol yang disebutkan di sini meliputi: saklar if for while, dll. Untuk struktur kontrol, harus ada spasi setelah kata kunci (seperti if for ..), dan kemudian tanda kurung kontrol, sehingga tidak tertukar dengan pemanggilan fungsi. Selain itu, Anda harus mencoba menggunakan kurung kurawal {} selengkap mungkin. Ini akan mencegah kebingungan logis atau kesalahan ketika Anda perlu menambahkan baris kode baru di masa mendatang. Berikut ini contohnya: if ((kondisi1) && (kondisi2)) {
Pernyataan 1;
}esleif ((Kondisi 3) || (Kondisi 4)) {
Pernyataan 2;
}kalau tidak {
Pernyataan 3;
}
Panggilan fungsi:
Untuk pemanggilan fungsi, tidak boleh ada spasi antara nama fungsi dan tanda kurung buka (()), untuk parameter fungsi, harus ada jarak yang sama antara koma pembatas dan parameter berikutnya, dan tidak boleh ada spasi di antara yang terakhir. parameter dan tanda kurung tutup. Di bawah Ini adalah pemanggilan fungsi standar; $result = foo($param1, $param2, $param3);
Tulisan tidak beraturan:
$hasil=foo ($param1,$param2,$param3);
$hasil=foo( $param1,$param2, $param3 );
Selain itu, jika Anda ingin menetapkan hasil pengembalian fungsi, harus ada spasi antara tanda sama dengan dan variabel yang ditetapkan. Pada saat yang sama, jika itu adalah rangkaian pernyataan penugasan terkait, Anda menambahkan spasi yang sesuai untuk menyelaraskan mereka, seperti ini :$result1 = $foo($param1, $param2, $param3);
$var2 = $foo($param3);
$var3 = $foo($param4, $param5);
Definisi fungsi:
Definisi fungsi mengikuti konvensi "satu kurung kurawal sejati": function connect(&$dsn, $persistent = false){
jika (is_array($dsn)) {
$dsninfo = &&dsn;
} kalau tidak {
$dsninfo = DB::parseDSN($dsn);
}
if (!$dsninfo || !$dsninfo['phptype']) {
kembalikan $ini->raiseError();
}
kembali benar;
}
Seperti yang ditunjukkan di atas, parameter opsional harus berada di akhir daftar parameter, dan selalu berusaha mengembalikan nilai fungsi yang bermakna.
Mengenai komentar:
Untuk dokumentasi kelas online, harus dapat dikonversi oleh PHPDoc, seperti JavaDoc. PHPDoc juga merupakan aplikasi PEAR. Untuk pengenalan lebih detail, Anda dapat mengunjungi http://www.phpdoc.de/ untuk melihatnya. Selain dokumentasi kelas online, Anda disarankan untuk menggunakan komentar non-dokumentasi untuk menjelaskan kode Anda. Saat Anda melihat sepotong kode, Anda berpikir: Oh, menurut saya Anda tidak perlu mendeskripsikannya dengan cermat di dokumentasi . Maka sebaiknya Anda memberikan komentar sederhana pada kode ini agar Anda tidak lupa cara kerjanya. Untuk formulir komentar, /* */ C dan // C++ keduanya bagus. Namun, jangan gunakan metode komentar Perl atau # shell.
Berisi kode:
Kapan pun Anda perlu menyertakan file kelas tanpa syarat, Anda harus menggunakan require_once; ketika Anda perlu menyertakan file kelas secara kondisional, Anda harus menggunakan include_once; ini memastikan bahwa file yang ingin Anda sertakan hanya akan disertakan satu kali, dan 2 pernyataan Kedua ini berbagi daftar file yang sama, jadi Anda tidak perlu khawatir keduanya akan bingung. Setelah require_once menyertakan file, include_once tidak akan menyertakan file yang sama lagi, dan sebaliknya.
Markup kode PHP:
Tentukan kode PHP Anda setiap saat, bukan sekadar menggunakannya. Hal ini memastikan kompatibilitas PEAR dan memfasilitasi porting lintas platform.
Deklarasi komentar di header file:
Untuk semua file kode PHP yang perlu disertakan dalam rilis inti PEAR, Anda harus menambahkan pernyataan komentar berikut di awal file: /* vim: set expandtab tabstop=4 shiftwidth=4: */
// +--------------------------------- --- --------+
// |.PHP versi 4.0 |
// +--------------------------------- --- --------+
// |. Hak Cipta (c) 1997, 1998, 1999, 2000, 2001 Grup PHP |
// +--------------------------------- --- --------+
// |. File sumber ini tunduk pada lisensi PHP versi 2.0, |
// |. yang dibundel dengan paket ini dalam file LICENSE, dan |
// |.tersedia di melalui world-wide-web di |
// |.http: //www.php.net/license/2_02.txt |
// |. Jika Anda tidak menerima salinan lisensi PHP dan tidak dapat |
// |. mendapatkannya melalui world-wide-web, silakan kirim catatan ke |
// |[email protected] agar kami dapat segera mengirimkan salinannya kepada Anda |
// +--------------------------------- --- --------+
// |. Penulis: Penulis Asli |
// |. Nama Anda |
// +--------------------------------- --- --------+
//
// $Id$
Untuk file yang tidak ada dalam basis kode inti PEAR, disarankan agar Anda juga memiliki blok komentar serupa seperti ini di awal file, yang menunjukkan hak cipta, lisensi, penulis, dll. Pada saat yang sama, tambahkan MODELINE VIM di baris pertama, sehingga gaya kode PEAR dapat dipertahankan di VIM.
Markup CVS:
Seperti yang ditunjukkan di atas, tambahkan tag ID CVS ke setiap file. Jika file yang Anda edit atau modifikasi tidak memiliki tag ini, silakan tambahkan, atau ganti dengan ekspresi serupa di file asli (seperti "Terakhir diubah" dll. )
Contoh URL:
Anda dapat mengikuti RFC 2606 dan menggunakan " www.example.com " sebagai semua contoh URL.
Penamaan konstan:
Konstanta harus ditulis dalam huruf besar jika memungkinkan, dan agar lebih mudah dipahami, gunakan garis bawah untuk memisahkan setiap kata. Pada saat yang sama, Anda harus mengawali nama paket atau nama kelas tempat konstanta berada. Misalnya, konstanta di kelas Bug harus dimulai dengan Bug_. Di atas adalah aturan pengkodean PEAR. Untuk aturan pengkodean lebih detail, silakan lihat deskripsi file CODING_STANDDARD di PEAR. Untuk lebih memahami aturan pengkodean ini, Anda juga dapat merujuk pada kode modul inti PEAR yang ada.
Mulailah dengan PEAR
Penggunaan PEAR sangat sederhana, Anda hanya perlu mendefinisikan program PEAR Anda sendiri seperti ini: require_once "PEAR.php";
kelas nama_kelas_anda diperluas PEAR{
Definisi kelas Anda...
}
Tentu saja, Anda harus mematuhi aturan pengkodean PEAR yang disebutkan di atas, dan kemudian Anda dapat mengimplementasikan apa yang ingin Anda lakukan di dalam kelas Anda. Selanjutnya, mari kita bahas. Faktanya, PEAR memberi kita 2 kelas yang telah ditentukan sebelumnya: PEAR: Ini adalah kelas dasar PEAR, dan semua ekstensi PEAR harus mewarisi dan berasal darinya. PEAR_Error: kelas dasar penanganan kesalahan PEAR, Anda dapat memilih untuk mendapatkan kelas penanganan kesalahan Anda sendiri.
Secara umum, Anda tidak boleh membuat instance PEAR secara langsung, tetapi turunkan sendiri kelas baru lalu buat instance dari kelas baru tersebut. Sebagai kelas dasar, PEAR memberi kita beberapa fungsi yang berguna, yang paling penting adalah destruktor dan
destruktor penanganan kesalahan.
PHP mendukung konstruktor, tetapi tidak mendukung destruktor. Namun, PHP menyediakan fungsi register_shutdown_function(), yang dapat memanggil kembali fungsi yang terdaftar sebelum skrip dihentikan. Jika Anda memiliki subkelas PEAR yang disebut mypear, maka di kelas mypear, Anda dapat mendefinisikan suatu fungsi. Nama fungsi adalah garis bawah ditambah nama kelas Anda, _mypear(). Namun destruktor ini berbeda dengan destruktor di C++, destruktor ini tidak akan dieksekusi saat objek dihapus, tetapi saat skrip berakhir. Karena register_shutdown_function() digunakan, informasi yang dicetak tidak akan dikembalikan ke browser di destruktor Anda. Selain itu, di konstruktor Anda, Anda perlu memanggil konstruktor kelas induknya, karena PHP tidak akan secara otomatis memanggil konstruktor kelas induk, dan destruktor tersebut perlu didaftarkan di konstruktor PEAR Kode sumber PEAR: fungsi PEAR() {
if (metode_ada($ini, "_".get_class($ini))) {
global $_PEAR_destructor_object_list;
$_PEAR_destructor_object_list[] = &ini;
}
if ($ini->_debug) {
printf("Konstruktor PEAR dipanggil, kelas=%sn",
get_class($ini));
}
.....
fungsi _PEAR_call_destructors() {
global $_PEAR_destructor_object_list;
if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) {
setel ulang($_PEAR_destructor_object_list);
while (daftar($k, $objref) = masing-masing($_PEAR_destructor_object_list)) {
$penghancur = "_".get_class($objref);
if (method_exists($objref, $destructor)) {
$objref->$destruktor();
}
}
//Hapus daftar objek yang terdaftar,
//Mencegah panggilan berulang
$_PEAR_destructor_object_list = array();
}}
....
register_shutdown_function("_PEAR_call_destructors");
Kode di atas menunjukkan bagaimana PEAR mengimplementasikan destruktor. Pada fungsi komponen, ia akan memeriksa apakah ada destruktor di kelas saat ini. Jika demikian, maka referensi kelas saat ini akan dimasukkan ke dalam daftar global, di _ Dalam PEAR_call_destructors. , periksa apakah setiap elemen dalam daftar global memiliki destruktor yang sesuai, jika ya, panggil elemen tersebut, dan terakhir hapus daftar global.
Pada baris kode terakhir di PEAR.php, panggil register_shutdown_function("_PEAR_call_destructors") untuk mendaftarkan _PEAR_call_destructors, sehingga ketika skrip dijalankan, PHP akan memanggil kembali fungsi ini. Dengan menggunakan destruktor, Anda dapat melakukan beberapa pekerjaan "perawatan lanjutan" yang diperlukan sebelum keluar setelah memproses permintaan pengguna. Contoh umumnya adalah Anda dapat menutup file yang terbuka, memutuskan sambungan dari database, dan menyimpan data tertentu di disk, dll.
Penanganan kesalahan
PEAR memungkinkan Anda menangani kesalahan dalam banyak cara. Anda tidak hanya sekadar mengembalikan kode kesalahan, atau informasi kesalahan, namun Anda juga dapat mengembalikan objek PEAR_Error, atau objek kesalahan baru yang berasal dari PEAR_Error.
Objek kesalahan di PEAR tidak membatasi bentuk keluaran tertentu. Ia hanya dapat menangkap kesalahan tanpa mengembalikan terlalu banyak informasi kepada pengguna, atau dapat memanggil kembali fungsi penanganan kesalahan khusus pada saat yang sama, meskipun ia mengeluarkan informasi kesalahan , bisa juga Anda terpaksa menggunakan format HTML. Anda dapat menampilkan XML, format CSV, atau format lain yang Anda tentukan sendiri. Anda hanya perlu mendapatkan kelas baru dari PEAR_Error, lalu membuat dan "melempar" kelas baru ini ke waktu yang tepat.
Penanganan kesalahan sederhana:
Di PEAR, penanganan error yang paling sederhana adalah dengan "membuang" error tersebut. Anda cukup membuat dan mengembalikan objek PEAR_Error. Berikut ini contoh sederhananya: function myconnect($host = "localhost", $port = 1080){
$fp = fsockopen($host, $port, $errno, $errstr);
jika (!is_resource($fp)) {
kembalikan PEAR_Error baru($errstr, $errno);
}
kembalikan $fp;
}
$kaus kaki = koneksi saya();
jika (PEAR::isError($sock)) {
cetak "kesalahan koneksi: ".$sock->getMessage()."n"
}
Seperti yang ditunjukkan pada kode di atas, setelah mengeksekusi sepotong kode yang mungkin menghasilkan kesalahan, Anda perlu menggunakan isError PEAR untuk mendeteksi apakah ada kesalahan, dan Anda dapat menggunakan getMessage PEAR_Error untuk mendapatkan pesan kesalahan terbaru.
dan raiseError
di tempat-tempat utama.
Setelah PHP4.0.5, PEAR memiliki 2 fungsi lagi:
setErrorHandling($mode, $pilihan = null)
raiseError($pesan = null, $kode = null, $mode = null,$options = null, $userinfo = null)
Yang pertama dapat mengatur mode penanganan kesalahan default PEAR, dan yang terakhir adalah fungsi pembungkus yang mengembalikan objek PEAR_Error. Ini sedikit berbeda dari membuat dan mengembalikan objek PEAR_Error secara langsung. Jika parameter seperti $mode dan $options dihilangkan, itu akan terjadi Buat objek PEAR_Error ini menggunakan nilai default, yang dapat Anda sesuaikan menggunakan setErrorHandling().
PEAR_Kesalahan
PEAR_Error adalah kelas dasar objek kesalahan PEAR. Berbeda dengan PEAR, secara umum, Anda dapat langsung membuat instance PEAR_Error. Metode pembuatannya adalah: $error = new PEAR_Error($message, $code, $mode, $options, $ userinfo );
$message adalah pesan kesalahan Anda, $code adalah nomor kesalahan, dan tiga parameter terakhir berkaitan erat:
$mode: adalah mode penanganan kesalahan, yang dapat berupa konstanta berikut:
PEAR_ERROR_RETURN: Hanya mengembalikan objek kesalahan (mode default)
PEAR_ERROR_PRINT: Cetak pesan kesalahan ini di fungsi build, tetapi program saat ini akan terus berjalan.
PEAR_ERROR_TRIGGER: Gunakan trigger_error() PHP untuk memicu kesalahan. Jika Anda telah menyiapkan fungsi penanganan kesalahan, atau Anda menyetel tingkat penanganan kesalahan PHP ke E_USER_ERROR, maka program saat ini akan dihentikan.
PEAR_ERROR_DIE: Cetak kesalahan dan keluar, program berakhir.
PEAR_ERROR_CALLBACK: Gunakan fungsi atau metode panggilan balik untuk menangani kesalahan saat ini dan program akan berhenti.
$options: Parameter ini hanya berfungsi jika $mode adalah PEAR_ERROR_TRIGGER dan PEAR_ERROR_CALLBACK. Jika PEAR_ERROR_TRIGGER, $options harus berupa salah satu dari tiga konstanta E_USER_NOTICE, E_USER_WARNING atau E_USER_ERROR, yang konsisten dengan nilai trigger_error di PHP. Jika $mode adalah PEAR_ERROR_CALLBACK, $options dapat berupa string yang berisi nama fungsi yang akan dipanggil kembali, atau array yang terdiri dari 2 elemen, masing-masing berupa variabel objek dan string (menunjukkan metode yang akan dipanggil).
$userinfo: Menyimpan informasi pengguna tambahan. Anda dapat memasukkan informasi debug yang relevan di sini.
Ada beberapa metode yang umum digunakan dalam PEAR_Error, yang tidak dijelaskan dalam dokumentasi PHP. Metode tersebut tercantum di sini:
int getMode: Mengembalikan mode penanganan kesalahan saat ini, bilangan bulat.
string getMessage: Mengembalikan pesan kesalahan lengkap saat ini, string.
getCallback campuran: Mengembalikan informasi panggilan balik saat ini, yang mungkin berupa nama fungsi yang dipanggil kembali, atau array (objek, metode).
int getCode: Mengembalikan kode kesalahan bilangan bulat.
string getType: Mengembalikan tipe yang salah, yaitu nama kelas saat ini, string.
string getUserInfo: Mengembalikan informasi pengguna tambahan, string.
string getDebugInfo: Isinya sama seperti di atas.
string toString: Mengembalikan deskripsi string terperinci dari objek saat ini, termasuk mode penanganan kesalahan, level, informasi kesalahan, kode kesalahan, fungsi panggilan balik terkait, dll.
Singkatnya
, pengenalan PEAR telah selesai. Singkatnya, jika Anda ingin membuat aplikasi ekstensi PEAR, Anda perlu melakukan ini:
require_once "PEAR.php"
Gunakan kelas your_pear_extend extends PEAR{} untuk mendefinisikan kelas baru Anda.
Di konstruktor kelas Anda, panggil konstruktor kelas induk PEAR: function your_pear_extend{
$ini->PIR();
...
}
Jika perlu, tentukan destruktor _your_pear_extend
Jika perlu, turunkan kelas penanganan kesalahan Anda sendiri dari PEAR_Error untuk menyetel mode penanganan kesalahan dan memicu kesalahan bila diperlukan.
Setelah mengeksekusi kode yang mungkin menghasilkan kesalahan, gunakan PEAR::isError($obj) untuk menangkap kesalahan terkait.
Terapkan fungsionalitas Anda sendiri.
Pada rilis PEAR core sudah terdapat banyak modul aplikasi unggulan seperti: PHPDoc, Cache, dan HTML.