??ASP est une technologie de programmation de pages Web dynamique introduite par Microsoft à un stade précoce. Cependant, sa capacité à combiner ADO pour fournir un accès pratique et rapide aux bases de données et à d'autres technologies telles que XML, COM/ActiveX, etc. La structure multicouche du serveur lui confère encore aujourd'hui une forte vitalité et un certain développement. Bien qu'ASP.Net soit complètement différent de l'architecture ASP, bon nombre de ses objets intégrés sont également étendus sur la base d'ASP. Il existe d'innombrables articles présentant ASP sur Internet, mais peu d'entre eux présentent l'ASP orienté objet et le comparent à d'autres langages. C'est pourquoi j'ai décidé d'écrire cet article.
??Comme il s'agit d'une première version, ASP ne fournit qu'une interface orientée objet très faible. Comme nous le savons tous, le langage d'implémentation d'ASP est divisé en VBScript et JavaScript/JScript : Dans VBScript, il y a le mot-clé Class, qui peut être utilisé pour déclarer une classe personnalisée ; JavaScript est bizarre, il utilise une fonction pour "déclarer" la classe, puis dans la fonction Ici, les propriétés sont définies via this.prototype et les méthodes sont définies via this.func. La discussion ici se concentrera sur VBScript. La déclaration de classe de VBScript est la suivante :
??Nom de la classe
?? déclarations
??Fin de la classe
??Vous pouvez déclarer ici des membres publics ou privés dans des déclarations, y compris des fonctions, des membres et des propriétés. Concernant les attributs, je dois faire l'éloge des méthodes get et set de Microsoft. Ce concept apparu dans COM a été utilisé jusqu'à .Net. Je pense personnellement que pour les programmeurs, il est préférable d'utiliser getProp() et setProp() que Java. beaucoup plus pratique et intuitif pour obtenir le même effet d’une seule manière.
??En comparaison, les classes de VBScript sont différentes des classes de PHP4 (bien sûr, elles ne sont pas comparables au dernier PHP5). Les classes de VBScript conservent les "fonctionnalités" orientées objet incomplètes de VB. Elles n'en implémentent que la plupart. basic Les constructeurs/destructeurs de base, les fonctions membres, les variables, les propriétés et même les constructeurs ne peuvent pas prendre de paramètres. En PHP4, des propriétés importantes des classes telles que l'héritage et la surcharge de fonctions sont également réalisées. Ce n'est que lorsque celles-ci sont réalisées qu'il peut être qualifié d'orienté objet et peut fournir une base pour réaliser le polymorphisme. Mais aucun d’eux n’implémente de fonctions telles que les membres statiques de la classe. Bien que d'autres modifications puissent être utilisées pour obtenir le même effet, du point de vue orienté objet, cela est incomplet (parce que PHP est très flexible, en PHP4, les variables statiques d'une classe peuvent être indirectement implémentées via les variables statiques des fonctions membres ; et " ::" - opérateur qui peut implémenter l'accès aux fonctions statiques d'une classe - il n'y a pas de contrôle strict dans PHP4. En d'autres termes, toutes les fonctions membres sont accessibles en tant que fonctions statiques, tant que vous n'utilisez pas de variables membres dans la fonction. Aucune erreur. VBScript n'implémente pas du tout la statique et ne peut être implémenté qu'à l'aide d'une session ou d'une application). Ainsi, en utilisation normale, vous pouvez utiliser les classes personnalisées de VBScript pour encapsuler certaines opérations, mais ne vous attendez pas à ce qu'elles servent vos idées orientées objet comme C++/Java/.Net.
??VBScript promeut également le bon style en VB selon lequel les paramètres ou variables par défaut sont des références. De cette façon, bien que le langage de script ne soit pas sensible au type, il peut également obtenir le même effet de pointeurs/références en C/C++ et accomplir de nombreuses choses. Le plus basique, par exemple, l'utilise pour définir la classe de nœuds ListNode d'une liste :
<%
Nœud de liste de classes
Contenu public
NextNode publique_Initialize
()
Contenu="Nœud"
Définir NextNode=Rien
Fin du sous-marin
Fin du cours
%>
??Haha, c'est aussi simple que cela, mais ne ressentez pas de mépris et n'oubliez pas d'initialiser les variables. C'est similaire en VB, ajoutez simplement le type lors de la déclaration. Et lors de l'utilisation :
<%
Définir nh = nouveau ListNode
Définir nh.NextNode = nouveau ListNode
"D'autres déclarations...
'Parcourir la liste
Définir n = nh
Tandis que Not n n'est rien
Réponse.Écrire n.Content+"<br />"
Définir n=n.NextNode
Wende
%>
??Si aucun autre code n'est ajouté, le résultat ci-dessus est deux "nœuds". Il en va de même pour les classes et objets personnalisés de VBScript. Tant que vous maîtrisez les concepts de base et en avez une certaine compréhension, cela ne pourrait pas être plus simple. Encore une fois, utiliser l'instruction Set pour attribuer une valeur à un objet équivaut à une affectation en Java, qui consiste à obtenir une référence. C'est bien mieux que l'affectation d'objet par défaut dans PHP4 qui appelle le constructeur de copie pour créer un nouvel objet (même une instruction comme obj=new Obj ; créera deux objets ! Si vous voulez obtenir une référence, vous devez mettre la variable après le signe égal affiché avec &) devant, et il semble que PHP5 ne veuille pas modifier cette approche de PHP4.
??La session elle-même dans ASP peut stocker des objets. Elle peut enregistrer des variables de base, des tableaux, des objets d'automatisation (Objets d'automatisation), etc., mais elle rencontrera des problèmes lors du stockage des objets de classes personnalisées. Tel que le code suivant :
<%
Si isempty(Session("node")) Then Set Session("node")=New ListNode
Définir n=Session("nœud")
Réponse.Écrire n.Contenu
%>
??Toujours la classe ListNode ci-dessus, ce code est destiné à conserver un seul objet ListNode dans une session utilisateur. Par conséquent, lorsque l'utilisateur visite la page Web pour la première fois, un objet de ListNode sera généré et enregistré dans la session (« nœud ») ; lorsque l'utilisateur visitera la page Web ultérieurement, car la session (« nœud ») n'est pas vide, elle ne générera pas de nouvel objet, mais récupérera l'objet enregistré à partir de la session ("node"). Théoriquement, 100 devrait également être affiché, mais voici le problème, ASP continue de signaler une erreur :
??Erreur d'exécution Microsoft VBScript '800a01b6'
??L'objet ne prend pas en charge cette propriété ou méthode : 'n.Content'
??L'utilisation de n.Type provoquera également des erreurs. Le même code est traduit en PHP et s'exécute avec succès. Pourquoi?
??Après une analyse personnelle, je pense qu'il est exact que Session peut enregistrer des objets, mais le mécanisme de conversion de type dans VBScript est trop faible et il n'y a pas de conversion de type forcée explicite que les utilisateurs peuvent utiliser, donc Session ("nœud") ne peut pas être correctement converti en type ListNode. Parce qu'il s'agit d'une classe personnalisée, nous ne pouvons avoir que l'instruction de définition de la classe dans chaque page. De cette façon, du point de vue d'ASP, chaque fois que cette page est lue, la classe ListNode est une nouvelle classe, donc ce n'est pas le cas. reconnaître la classe dans l'objet Session de cette classe.
??Conclusion : essayez de ne pas utiliser de session ou d'application pour stocker des objets de classes personnalisées dans ASP. Si vous en avez vraiment besoin, vous pouvez envisager d'utiliser COM pour écrire la classe, puis utiliser : Set Session("obj") = Server.CreateObject("YourApp.YourClass") dans VBScript pour créer un objet, puis vous pourrez réaliser les fonctions envisagées ci-dessus.