主頁(yè) > 知識(shí)庫(kù) > ASP面向?qū)ο缶幊烫接懠氨容^

ASP面向?qū)ο缶幊烫接懠氨容^

熱門標(biāo)簽:為什么外呼系統(tǒng)需要預(yù)存話費(fèi)呢 咸陽(yáng)銷售外呼系統(tǒng) 企數(shù)外呼系統(tǒng)能用多久 離線電子地圖標(biāo)注軟件注冊(cè) 辦理400電話一年多少錢 外呼回?fù)芟到y(tǒng)圖片 蘭州智能語(yǔ)音電銷機(jī)器人功能 寧夏怎么申請(qǐng)400電話 常用地圖標(biāo)注范圍點(diǎn)
ASP面向?qū)ο缶幊烫接懠氨容^     選擇自 RAINMAN_NET 的 Blog  
關(guān)鍵字   ASP面向?qū)ο缶幊烫接懠氨容^ 
出處    

 ASP是Microsoft于較早期推出的動(dòng)態(tài)網(wǎng)頁(yè)編程技術(shù),但其結(jié)合ADO對(duì)數(shù)據(jù)庫(kù)方便快捷的訪問、結(jié)合XML、COM/ActiveX等其它技術(shù) 實(shí)現(xiàn)服務(wù)器多層結(jié)構(gòu)的功能使它在今天還有著頑強(qiáng)的生命力,并且依然有著一定的發(fā)展。ASP.Net雖然在架構(gòu)上完全不同于ASP,但它很多內(nèi)建對(duì)象也是基 于ASP進(jìn)行擴(kuò)展的。網(wǎng)上有無(wú)數(shù)的介紹ASP的文章,卻鮮有介紹ASP面向?qū)ο笠约芭c其它語(yǔ)言比較的,這也就是我下決心寫這篇文章的原因。
  因?yàn)槭窃缙诘陌姹荆珹SP只提供了很弱的面向?qū)ο蟮慕涌?。眾所周知,ASP的實(shí)現(xiàn)語(yǔ)言分為VBScript和JavaScript/JScript: 在VBScript中有Class關(guān)鍵字,可以用來(lái)聲明一個(gè)自定義類;JavaScript就比較怪,它用一個(gè)函數(shù)來(lái)“聲明”類,然后在該函數(shù)里通過(guò) this.prototype定義屬性,this.func定義方法。這里將以VBScript為主進(jìn)行討論,VBScript的類聲明是這樣的:
  Class name
      statements
  End Class 
  這里statements里可以聲明公有或私有的成員,包括函數(shù)、成員和屬性。關(guān)于屬性,不得不贊一下微軟的get和set方法,這個(gè)在COM中出現(xiàn) 的理念,直到.Net中一直被沿用下來(lái),個(gè)人認(rèn)為對(duì)程序員而言,比Java用getProp()、setProp()兩個(gè)方法來(lái)實(shí)現(xiàn)同樣效果要方便直觀得 多。
  相比之下,VBScript中的類與PHP4中的類各有千秋(當(dāng)然跟最新的PHP5沒法比),VBScript中的類保持了VB的不完全面向?qū)ο蟮?nbsp;“特性”,它僅僅實(shí)現(xiàn)了最基本的構(gòu)造/析構(gòu)函數(shù)、成員函數(shù)、變量、屬性,甚至構(gòu)造函數(shù)不能帶參數(shù)。PHP4中則還實(shí)現(xiàn)了繼承、函數(shù)重載等類的重要性質(zhì),也 只有實(shí)現(xiàn)了這些,才能稱之為面向?qū)ο?,才有可能為?shí)現(xiàn)多態(tài)提供基礎(chǔ)。但二者均沒有實(shí)現(xiàn)類的靜態(tài)(static)成員等功能。盡管可以用其它一些變通達(dá)到同 樣的功效,但從面向?qū)ο蟮乃枷氤霭l(fā),這都是不徹底的(由于PHP非常靈活,PHP4中可以通過(guò)成員函數(shù)的靜態(tài)變量來(lái)間接實(shí)現(xiàn)類的靜態(tài)變量;而“::”—— 可以實(shí)現(xiàn)類的靜態(tài)函數(shù)訪問的操作符——在PHP4中沒有嚴(yán)格檢查。換句話說(shuō),所有的成員函數(shù)都可以當(dāng)成靜態(tài)函數(shù)訪問,只要你在該函數(shù)里不使用成員變量就不 會(huì)出錯(cuò)。VBScript根本沒有實(shí)現(xiàn)static,只能用Session或Application來(lái)實(shí)現(xiàn))。所以在平常的使用中,你可以使用 VBScript的自定義類來(lái)封裝一些操作,但不要指望它像C++ / Java / .Net那樣為你的面向?qū)ο笏枷敕?wù)。
  VBScript同樣發(fā)揚(yáng)了VB中默認(rèn)的參數(shù)或變量是引用的好風(fēng)格。這樣,盡管Script語(yǔ)言中對(duì)類型不敏感,但它還能夠達(dá)到C/C++里指針/引用同樣的功效,完成很多事情。最基本的,比如說(shuō)用它定義一個(gè)列表(List)的節(jié)點(diǎn)類ListNode:
%
Class ListNode
    Public Content
    Public NextNode

    Private Sub Class_Initialize()
        Content="Node"
        Set NextNode=Nothing
    End Sub
End Class
%>
  呵呵,就這么簡(jiǎn)單,但不要感到鄙夷,也不要忘記對(duì)變量初始值。VB中也差不多,聲明時(shí)加上類型就行了。而使用時(shí):
%
Set nh=new ListNode
Set nh.NextNode=new ListNode
'其它語(yǔ)句……
'遍歷列表
Set n=nh
While Not n is Nothing
    Response.Write n.Content+"br />"
    Set n=n.NextNode
Wend
%>
  如果不加其它代碼,上面的運(yùn)行結(jié)果是兩個(gè)“node”。VBScript的自定義類和對(duì)象也不外如是,只要你掌握基本的概念,對(duì)它有一定了解,就再簡(jiǎn)單不過(guò)了。再次強(qiáng)調(diào),用Set語(yǔ)句來(lái)對(duì)對(duì)象進(jìn)行賦值,相當(dāng)于Java里的賦值,都是獲得一個(gè)引用。這比PHP4里默認(rèn)對(duì)象賦值是調(diào)用拷貝構(gòu)造函數(shù)來(lái)創(chuàng)建一 個(gè)新的對(duì)象好多了(甚至連obj=new Obj;這樣的語(yǔ)句都會(huì)創(chuàng)建兩個(gè)對(duì)象!如果你想獲得引用的話,要在等號(hào)后變量前顯示地加上),而似乎PHP5也不想修改PHP4的這種做法。
  ASP中的Session本身是可以儲(chǔ)存對(duì)象的,它可以保存基本變量,數(shù)組,自動(dòng)化對(duì)象(Automation Object)等,但在儲(chǔ)存自定義類的對(duì)象時(shí)會(huì)碰到問題。如下面的代碼:
%
If isempty(Session("node")) Then Set Session("node")=New ListNode
Set n=Session("node")
Response.Write n.Content
%>
  還是上面的ListNode這個(gè)類,這段代碼意圖在一個(gè)用戶會(huì)話中只保留一個(gè)ListNode的對(duì)象。所以在用戶第一次訪問該網(wǎng)頁(yè)時(shí),會(huì)生成ListNode的一個(gè)對(duì)象,并保存在Session(“node”)中;后面訪問該網(wǎng)頁(yè)時(shí),因?yàn)镾ession(“node”)不為空了,所以不會(huì)生成一個(gè)新的對(duì)象,而是到 Session(“node”)中取出保存的對(duì)象。理論上應(yīng)該也會(huì)輸出100,但是問題來(lái)了,ASP一直會(huì)報(bào)錯(cuò):
  Microsoft VBScript runtime error '800a01b6' 
  Object doesn't support this property or method: 'n.Content'
  用n.Type也會(huì)出錯(cuò)。同樣的代碼翻譯成PHP,運(yùn)行卻是可以通過(guò)的。為什么?
  個(gè)人分析下來(lái),認(rèn)為Session可以保存對(duì)象是沒錯(cuò),只是VBScript中類型轉(zhuǎn)換的機(jī)制太弱,而且沒有顯式的強(qiáng)制類型轉(zhuǎn)換供用戶使用,無(wú)法將 Session(“node”)正確轉(zhuǎn)換為L(zhǎng)istNode類型。因?yàn)槭亲远x的類,我們只能在每個(gè)頁(yè)面中都出現(xiàn)類的定義語(yǔ)句,這樣在ASP看來(lái),每次讀 取這個(gè)頁(yè)面時(shí),ListNode類都是一個(gè)新類,所以就不認(rèn)得Session中的這個(gè)類的對(duì)象了。
  結(jié)論:盡量不要想到用Session或Application來(lái)存儲(chǔ)ASP中自定義類的對(duì)象。如果確實(shí)需要,可以考慮用COM來(lái)編寫類,然后在VBScript中用:Set Session("obj") = Server.CreateObject("YourApp.YourClass")來(lái)創(chuàng)建一個(gè)對(duì)象,然后即可實(shí)現(xiàn)上面預(yù)想的功能了。  


標(biāo)簽:麗江 昆明 咸陽(yáng) 家電維修 溫州 昌都 鐵嶺 泰州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP面向?qū)ο缶幊烫接懠氨容^》,本文關(guān)鍵詞  ASP,面向,對(duì)象,編程,探討,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP面向?qū)ο缶幊烫接懠氨容^》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于ASP面向?qū)ο缶幊烫接懠氨容^的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章