„ASP ist eine von Microsoft in einem frühen Stadium eingeführte dynamische Webseiten-Programmiertechnologie. Seine Fähigkeit, ADO zu kombinieren, um einen bequemen und schnellen Zugriff auf Datenbanken zu ermöglichen, und andere Technologien wie XML, COM/ActiveX usw., um das zu realisieren Die mehrschichtige Struktur des Servers verleiht ihm auch heute noch einen starken Halt und weist noch eine gewisse Entwicklung auf. Obwohl sich ASP.Net in der Architektur völlig von ASP unterscheidet, werden viele seiner integrierten Objekte auch auf Basis von ASP erweitert. Es gibt unzählige Artikel im Internet, in denen ASP vorgestellt wird, aber nur wenige stellen ASP objektorientiert vor und vergleichen es mit anderen Sprachen. Aus diesem Grund habe ich beschlossen, diesen Artikel zu schreiben.
??Da es sich um eine frühe Version handelt, bietet ASP nur eine sehr schwache objektorientierte Schnittstelle. Wie wir alle wissen, ist die Implementierungssprache von ASP in VBScript und JavaScript/JScript unterteilt: In VBScript gibt es das Schlüsselwort Class, mit dem eine benutzerdefinierte Klasse deklariert werden kann. JavaScript verwendet eine Funktion zum „Deklarieren“. In der Klasse und dann in der Funktion werden Eigenschaften über this.prototype und Methoden über this.func definiert. Die Diskussion konzentriert sich hier auf VBScript. Die Klassendeklaration von VBScript lautet wie folgt:
??Klassenname
?? Aussagen
??Klasse beenden
??Sie können hier öffentliche oder private Mitglieder in Anweisungen deklarieren, einschließlich Funktionen, Mitglieder und Eigenschaften. In Bezug auf Attribute muss ich die Get- und Set-Methoden von Microsoft loben, die bis .Net verwendet wurden. Ich persönlich denke, dass es für Programmierer besser ist, getProp() und setProp() zu verwenden viel bequemer und intuitiver, den gleichen Effekt auf eine Weise zu erzielen.
„Im Vergleich dazu unterscheiden sich die Klassen in VBScript von den Klassen in PHP4 (natürlich sind sie nicht mit dem neuesten PHP5 vergleichbar. Die Klassen in VBScript behalten nur die unvollständigen objektorientierten „Funktionen“ bei). Grundlegende Konstruktoren/Destruktoren, Mitgliedsfunktionen, Variablen, Eigenschaften und sogar Konstruktoren können keine Parameter annehmen. In PHP4 werden auch wichtige Eigenschaften von Klassen wie Vererbung und Funktionsüberladung realisiert. Erst wenn diese realisiert sind, kann es als objektorientiert bezeichnet werden und eine Grundlage für die Realisierung von Polymorphismus bieten. Aber keiner von ihnen implementiert Funktionen wie statische Mitglieder der Klasse. Obwohl einige andere Modifikationen verwendet werden können, um den gleichen Effekt zu erzielen, ist dies aus objektorientierter Sicht unvollständig (da PHP sehr flexibel ist, können in PHP4 statische Variablen einer Klasse indirekt durch statische Variablen von Mitgliedsfunktionen implementiert werden; und „:“ – Operator, der den statischen Funktionszugriff einer Klasse implementieren kann – in PHP4 gibt es keine strenge Prüfung. Mit anderen Worten: Auf alle Mitgliedsfunktionen kann als statische Funktion zugegriffen werden, solange Sie keine Mitgliedsvariablen in der Funktion verwenden Kein Fehler. VBScript implementiert überhaupt keine Statik und kann nur mithilfe von Sitzung oder Anwendung implementiert werden. Bei normaler Verwendung können Sie also die benutzerdefinierten Klassen von VBScript verwenden, um einige Vorgänge zu kapseln, aber erwarten Sie nicht, dass es Ihren objektorientierten Ideen wie C++/Java/.Net dient.
„VBScript fördert auch den guten Stil in VB, dass die Standardparameter oder -variablen Referenzen sind. Obwohl die Skriptsprache nicht typabhängig ist, kann sie auf diese Weise auch den gleichen Effekt wie Zeiger/Referenzen in C/C++ erzielen und viele Dinge erreichen. Die einfachste Möglichkeit ist es beispielsweise, die Knotenklasse ListNode einer Liste zu definieren:
<%
Klasse ListNode
Öffentlicher Inhalt
Public NextNode
Private Sub Class_Initialize()
Content="Knoten"
Setzen Sie NextNode=Nothing
Sub beenden
Unterricht beenden
%>
??Haha, so einfach ist das, aber seien Sie nicht verächtlich und vergessen Sie nicht, die Variablen zu initialisieren. In VB ist es ähnlich, fügen Sie einfach den Typ bei der Deklaration hinzu. Und bei Verwendung:
<%
Setze nh=new ListNode
Legen Sie nh.NextNode=new ListNode fest
„Andere Aussagen...“
„Durchsuchen Sie die Liste
Setze n=nh
Während Not n Nothing ist
Response.Write n.Content+"<br />"
Setze n=n.NextNode
Wend
%>
??Wenn kein anderer Code hinzugefügt wird, sind das obige laufende Ergebnis zwei „Knoten“. Das Gleiche gilt für die benutzerdefinierten Klassen und Objekte von VBScript. Solange Sie die Grundkonzepte beherrschen und ein gewisses Verständnis dafür haben, könnte es nicht einfacher sein. Auch hier entspricht die Verwendung der Set-Anweisung zum Zuweisen eines Werts zu einem Objekt der Zuweisung in Java, bei der eine Referenz abgerufen wird. Dies ist viel besser als die Standardobjektzuweisung in PHP4, die den Kopierkonstruktor aufruft, um ein neues Objekt zu erstellen (selbst eine Anweisung wie obj=new Obj; erstellt zwei Objekte! Wenn Sie eine Referenz erhalten möchten, müssen Sie die Variable dahinter einfügen das Gleichheitszeichen wird mit &) davor angezeigt, und es scheint, dass PHP5 diesen Ansatz von PHP4 nicht ändern möchte.
Die Sitzung selbst in ASP kann Objekte speichern. Sie kann grundlegende Variablen, Arrays, Automatisierungsobjekte (Automatisierungsobjekte) usw. speichern, es treten jedoch Probleme beim Speichern von Objekten benutzerdefinierter Klassen auf. Wie zum Beispiel der folgende Code:
<%
Wenn isempty(Session("node")) dann Set Session("node")=New ListNode
Setze n=Session("node")
Response.Write n.Content
%>
??Immer noch die obige ListNode-Klasse, dieser Code soll nur ein ListNode-Objekt in einer Benutzersitzung behalten. Wenn der Benutzer die Webseite zum ersten Mal besucht, wird daher ein ListNode-Objekt generiert und in der Sitzung („Knoten“) gespeichert. Wenn der Benutzer die Webseite später besucht, ist die Sitzung („Knoten“) nicht leer generiert kein neues Objekt, sondern ruft das gespeicherte Objekt aus der Sitzung („Knoten“) ab. Theoretisch müsste auch 100 ausgegeben werden, doch hier kommt das Problem, ASP meldet immer wieder einen Fehler:
??Microsoft VBScript-Laufzeitfehler „800a01b6“
??Objekt unterstützt diese Eigenschaft oder Methode nicht: 'n.Content'
??Die Verwendung von n.Type führt ebenfalls zu Fehlern. Der gleiche Code wird in PHP übersetzt und erfolgreich ausgeführt. Warum?
„Nach persönlicher Analyse halte ich es für richtig, dass Session Objekte speichern kann, aber der Typkonvertierungsmechanismus in VBScript ist zu schwach und es gibt keine explizite erzwungene Typkonvertierung für Benutzer, sodass Session („Knoten“) dies nicht tun kann korrekt in den ListNode-Typ konvertiert. Da es sich um eine benutzerdefinierte Klasse handelt, können wir die Definitionsanweisung der Klasse nur auf jeder Seite haben. Aus Sicht von ASP ist die ListNode-Klasse also bei jedem Lesen dieser Seite eine neue Klasse Erkennen Sie die Klasse im Sitzungsobjekt dieser Klasse.
??Schlussfolgerung: Versuchen Sie, Sitzung oder Anwendung nicht zum Speichern von Objekten benutzerdefinierter Klassen in ASP zu verwenden. Wenn Sie es wirklich brauchen, können Sie in Betracht ziehen, COM zum Schreiben der Klasse zu verwenden und dann Folgendes zu verwenden: Set Session("obj") = Server.CreateObject("YourApp.YourClass") in VBScript, um ein Objekt zu erstellen, und dann können Sie es erreichen die oben vorgesehenen Funktionen.