自己建设公司网站,做房地产公司网站的费用,关于新品牌的营销策划,wordpress微信防红插件下载ASP是Microsoft于较早期推出的动态网页编程技术#xff0c;但其结合ADO对数据库方便快捷的访问、结合XML、COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力#xff0c;并且依然有着一定的发展。ASP.Net虽然在架构上完全不同于ASP#xff0…ASP是Microsoft于较早期推出的动态网页编程技术但其结合ADO对数据库方便快捷的访问、结合XML、COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力并且依然有着一定的发展。ASP.Net虽然在架构上完全不同于ASP但它很多内建对象也是基 于ASP进行扩展的。网上有无数的介绍ASP的文章却鲜有介绍ASP面向对象以及与其它语言比较的这也就是我下决心写这篇文章的原因。因为是早期的版本ASP只提供了很弱的面向对象的接口。众所周知ASP的实现语言分为VBScript和JavaScript/JScript 在VBScript中有Class关键字可以用来声明一个自定义类JavaScript就比较怪它用一个函数来“声明”类然后在该函数里通过 this.prototype定义属性this.func定义方法。这里将以VBScript为主进行讨论VBScript的类声明是这样的Class name statementsEnd Class 这里statements里可以声明公有或私有的成员包括函数、成员和属性。关于属性不得不赞一下微软的get和set方法这个在COM中出现 的理念直到.Net中一直被沿用下来个人认为对程序员而言比Java用getProp()、setProp()两个方法来实现同样效果要方便直观得 多。相比之下VBScript中的类与PHP4中的类各有千秋当然跟最新的PHP5没法比VBScript中的类保持了VB的不完全面向对象的 “特性”它仅仅实现了最基本的构造/析构函数、成员函数、变量、属性甚至构造函数不能带参数。PHP4中则还实现了继承、函数重载等类的重要性质也 只有实现了这些才能称之为面向对象才有可能为实现多态提供基础。但二者均没有实现类的静态static成员等功能。尽管可以用其它一些变通达到同 样的功效但从面向对象的思想出发这都是不彻底的由于PHP非常灵活PHP4中可以通过成员函数的静态变量来间接实现类的静态变量而“::”—— 可以实现类的静态函数访问的操作符——在PHP4中没有严格检查。换句话说所有的成员函数都可以当成静态函数访问只要你在该函数里不使用成员变量就不 会出错。VBScript根本没有实现static只能用Session或Application来实现。所以在平常的使用中你可以使用 VBScript的自定义类来封装一些操作但不要指望它像C / Java / .Net那样为你的面向对象思想服务。VBScript同样发扬了VB中默认的参数或变量是引用的好风格。这样尽管Script语言中对类型不敏感但它还能够达到C/C里指针/引用同样的功效完成很多事情。最基本的比如说用它定义一个列表List的节点类ListNode%Class ListNode Public Content Public NextNode Private Sub Class_Initialize() ContentNode Set NextNodeNothing End SubEnd Class%呵呵就这么简单但不要感到鄙夷也不要忘记对变量初始值。VB中也差不多声明时加上类型就行了。而使用时%Set nhnew ListNodeSet nh.NextNodenew ListNode其它语句……遍历列表Set nnhWhile Not n is Nothing Response.Write n.Contentbr / Set nn.NextNodeWend%如果不加其它代码上面的运行结果是两个“node”。VBScript的自定义类和对象也不外如是只要你掌握基本的概念对它有一定了解就再简单不过了。再次强调用Set语句来对对象进行赋值相当于Java里的赋值都是获得一个引用。这比PHP4里默认对象赋值是调用拷贝构造函数来创建一 个新的对象好多了甚至连objnew Obj;这样的语句都会创建两个对象如果你想获得引用的话要在等号后变量前显示地加上而似乎PHP5也不想修改PHP4的这种做法。ASP中的Session本身是可以储存对象的它可以保存基本变量数组自动化对象Automation Object等但在储存自定义类的对象时会碰到问题。如下面的代码%If isempty(Session(node)) Then Set Session(node)New ListNodeSet nSession(node)Response.Write n.Content%还是上面的ListNode这个类这段代码意图在一个用户会话中只保留一个ListNode的对象。所以在用户第一次访问该网页时会生成ListNode的一个对象并保存在Session(“node”)中后面访问该网页时因为Session(“node”)不为空了所以不会生成一个新的对象而是到 Session(“node”)中取出保存的对象。理论上应该也会输出100但是问题来了ASP一直会报错Microsoft VBScript runtime error 800a01b6 Object doesnt support this property or method: n.Content用n.Type也会出错。同样的代码翻译成PHP运行却是可以通过的。为什么个人分析下来认为Session可以保存对象是没错只是VBScript中类型转换的机制太弱而且没有显式的强制类型转换供用户使用无法将 Session(“node”)正确转换为ListNode类型。因为是自定义的类我们只能在每个页面中都出现类的定义语句这样在ASP看来每次读 取这个页面时ListNode类都是一个新类所以就不认得Session中的这个类的对象了。结论尽量不要想到用Session或Application来存储ASP中自定义类的对象。如果确实需要可以考虑用COM来编写类然后在VBScript中用Set Session(obj) Server.CreateObject(YourApp.YourClass)来创建一个对象然后即可实现上面预想的功能了。转载于:https://www.cnblogs.com/wonderow/archive/2004/11/18/65139.html