??ASP adalah teknologi pemrograman halaman web dinamis yang diperkenalkan oleh Microsoft pada tahap awal. Namun, kemampuannya untuk menggabungkan ADO untuk menyediakan akses mudah dan cepat ke database, dan teknologi lain seperti XML, COM/ActiveX, dll. untuk mewujudkannya. Struktur server yang berlapis-lapis membuatnya masih memiliki vitalitas yang kuat dan masih mengalami perkembangan tertentu. Meskipun ASP.Net benar-benar berbeda dari ASP dalam hal arsitektur, banyak objek bawaannya juga diperluas berdasarkan ASP. Ada banyak sekali artikel yang memperkenalkan ASP di Internet, tetapi hanya sedikit yang memperkenalkan ASP berorientasi objek dan membandingkannya dengan bahasa lain. Inilah sebabnya saya memutuskan untuk menulis artikel ini.
??Karena ini adalah versi awal, ASP hanya menyediakan antarmuka berorientasi objek yang sangat lemah. Seperti kita ketahui bersama, bahasa implementasi ASP dibagi menjadi VBScript dan JavaScript/JScript: Di VBScript, terdapat kata kunci Class, yang dapat digunakan untuk mendeklarasikan kelas khusus; JavaScript itu aneh, menggunakan fungsi untuk "mendeklarasikan" kelas, dan kemudian dalam fungsi Di sini, properti didefinisikan melalui this.prototype, dan metode ditentukan melalui this.func. Pembahasan disini akan fokus pada VBScript. Deklarasi kelas VBScript adalah sebagai berikut:
??Nama kelas
?? pernyataan
??Akhir Kelas
??Anda dapat mendeklarasikan anggota publik atau pribadi dalam pernyataan di sini, termasuk fungsi, anggota, dan properti. Mengenai atribut, saya harus memuji metode get dan set Microsoft. Konsep yang muncul di COM ini telah digunakan hingga .Net. Saya pribadi berpikir bahwa untuk programmer, lebih baik menggunakan getProp() dan setProp() daripada Java jauh lebih nyaman dan intuitif untuk mencapai efek yang sama dalam satu cara.
??Sebagai perbandingan, kelas-kelas di VBScript berbeda dengan kelas-kelas di PHP4 (tentu saja tidak sebanding dengan PHP5 terbaru). Kelas-kelas di VBScript mempertahankan "fitur" berorientasi objek yang tidak lengkap dari VB basic Konstruktor/destruktor dasar, fungsi anggota, variabel, properti, dan bahkan konstruktor tidak dapat mengambil parameter. Dalam PHP4, properti penting dari kelas seperti pewarisan dan kelebihan fungsi juga direalisasikan. Hanya jika properti tersebut direalisasikan maka properti tersebut dapat disebut berorientasi objek dan dapat memberikan dasar untuk mewujudkan polimorfisme. Tapi tak satu pun dari mereka mengimplementasikan fungsi seperti anggota kelas statis. Meskipun beberapa modifikasi lain dapat digunakan untuk mencapai efek yang sama, dari perspektif berorientasi objek, ini tidak lengkap (karena PHP sangat fleksibel, dalam PHP4, variabel statis suatu kelas dapat diimplementasikan secara tidak langsung melalui variabel statis fungsi anggota; dan " ::" - operator yang dapat mengimplementasikan akses fungsi statis suatu kelas - tidak ada pemeriksaan ketat di PHP4 Dengan kata lain, semua fungsi anggota dapat diakses sebagai fungsi statis, selama Anda tidak menggunakan variabel anggota dalam fungsi tersebut Tidak ada kesalahan. VBScript tidak mengimplementasikan statis sama sekali dan hanya dapat diimplementasikan menggunakan Sesi atau Aplikasi). Jadi dalam penggunaan normal, Anda dapat menggunakan kelas khusus VBScript untuk merangkum beberapa operasi, tapi jangan berharap itu akan melayani ide berorientasi objek Anda seperti C++/Java/.Net.
??VBScript juga mempromosikan gaya yang baik di VB bahwa parameter atau variabel default adalah referensi. Dengan cara ini, meskipun bahasa Script tidak peka terhadap tipe, ia juga dapat mencapai efek pointer/referensi yang sama di C/C++ dan mencapai banyak hal. Yang paling dasar, misalnya, menggunakannya untuk mendefinisikan kelas simpul ListNode dari sebuah daftar:
<%
Node Daftar Kelas
Konten Publik
NextNode Publik_Inisialisasi
()
Isi = "Simpul"
Setel NextNode=Tidak Ada
Akhiri Sub
Kelas Akhir
%>
??Haha, sesederhana itu, tapi jangan merasa jijik dan jangan lupa inisialisasi variabelnya. Mirip di VB, cukup tambahkan tipe saat mendeklarasikan. Dan saat menggunakan:
<%
Setel nh=ListNode baru
Setel nh.NextNode=ListNode baru
'Pernyataan lain...
'Melintasi daftarnya
Tetapkan n=nh
Sementara Bukan dan Bukan Apa-apa
Respon.Tulis n.Konten+"<br />"
Setel n=n.Node Berikutnya
Pergi ke
%>
??Jika tidak ada kode lain yang ditambahkan, hasil yang berjalan di atas adalah dua "node". Hal yang sama berlaku untuk kelas dan objek khusus VBScript. Selama Anda menguasai konsep dasar dan memiliki pemahaman tertentu tentangnya, semuanya menjadi lebih mudah. Sekali lagi, menggunakan pernyataan Set untuk memberikan nilai pada suatu objek sama dengan penugasan di Java, yaitu untuk mendapatkan referensi. Ini jauh lebih baik daripada penetapan objek default di PHP4 yang memanggil konstruktor salinan untuk membuat objek baru (bahkan pernyataan seperti obj=new Obj; akan membuat dua objek! Jika Anda ingin mendapatkan referensi, Anda harus meletakkan variabel setelahnya tanda sama dengan Ditampilkan dengan &) sebelumnya, dan tampaknya PHP5 tidak ingin mengubah pendekatan PHP4 ini.
??Sesi itu sendiri di ASP dapat menyimpan objek. Ia dapat menyimpan variabel dasar, array, objek otomasi (Objek Otomasi), dll., tetapi akan menemui masalah saat menyimpan objek kelas khusus. Seperti kode berikut:
<%
Jika kosong(Sesi("node")) Kemudian Tetapkan Sesi("node")=ListNode Baru
Setel n=Sesi("simpul")
Respon.Tulis n.Isi
%>
Masih kelas ListNode di atas, kode ini dimaksudkan untuk mempertahankan hanya satu objek ListNode dalam satu sesi pengguna. Oleh karena itu, ketika pengguna mengunjungi halaman web untuk pertama kalinya, objek ListNode akan dibuat dan disimpan di Session ("node"); ketika pengguna mengunjungi halaman web nanti, karena Session ("node") tidak kosong, itu tidak akan Menghasilkan objek baru, tetapi mengambil objek yang disimpan dari Sesi("node"). Secara teoritis, 100 juga harus menjadi output, tapi inilah masalahnya, ASP terus melaporkan kesalahan:
??Kesalahan waktu proses Microsoft VBScript '800a01b6'
??Objek tidak mendukung properti atau metode ini: 'n.Content'
??Menggunakan n.Type juga akan menyebabkan kesalahan. Kode yang sama diterjemahkan ke dalam PHP dan berjalan dengan sukses. Mengapa?
??Setelah analisis pribadi, menurut saya benar bahwa Sesi dapat menyimpan objek, tetapi mekanisme konversi tipe di VBScript terlalu lemah, dan tidak ada konversi tipe paksa yang eksplisit untuk digunakan pengguna, jadi Sesi ("node") tidak dapat dikonversi dengan benar ke tipe ListNode. Karena ini adalah kelas khusus, kita hanya dapat memiliki pernyataan definisi kelas di setiap halaman. Dengan cara ini, dari perspektif ASP, setiap kali halaman ini dibaca, kelas ListNode adalah kelas baru, jadi tidak ada kelas baru. mengenali kelas dalam objek Sesi kelas ini.
??Kesimpulan: Cobalah untuk tidak menggunakan Sesi atau Aplikasi untuk menyimpan objek kelas khusus di ASP. Jika Anda benar-benar membutuhkannya, Anda dapat mempertimbangkan untuk menggunakan COM untuk menulis kelas, dan kemudian menggunakan: Set Session("obj") = Server.CreateObject("YourApp.YourClass") di VBScript untuk membuat objek, dan kemudian Anda dapat mencapainya fungsi yang dibayangkan di atas.