¿Cómo se llama a un método desde una variable en ASP Classic?
-
22-07-2019 - |
Pregunta
Por ejemplo, ¿cómo puedo ejecutar me.test a continuación?
myvar = 'test'
me.myvar
ASP busca el método "myvar" y no lo encuentra En PHP, simplemente podría decir $ me- > $ myvar pero la sintaxis de ASP no distingue entre variables y métodos. ¿Sugerencias?
Estrechamente relacionado con esto, ¿hay una función method_exists en ASP Classic?
¡Gracias de antemano!
EDITAR: estoy escribiendo una clase de validación y me gustaría llamar a una lista de métodos a través de una cadena delimitada por tuberías.
Entonces, por ejemplo, para validar un campo de nombre, llamaría:
validate("required|min_length(3)|max_length(100)|alphanumeric")
Me gusta la idea de tener una sola línea que muestre todas las formas en que se valida un campo determinado. Y cada sección delimitada por tubería de la cadena es el nombre de un método.
Si tiene sugerencias para una mejor configuración, ¡soy todo oídos!
Solución
Puede lograr esto en VBScript utilizando la función GetRef
: -
Function Test(val)
Test = val & " has been tested"
End Function
Dim myvar : myvar = "Test"
Dim x : Set x = GetRef(myvar)
Response.Write x("Thing")
Enviará "La cosa ha sido probada" al cliente.
Entonces, aquí está su requisito de validación usando GetRef: -
validate("Hello World", "min_length(3)|max_length(10)|alphanumeric")
Function required(val)
required = val <> Empty
End Function
Function min_length(val, params)
min_length = Len(val) >= CInt(params(0))
End Function
Function max_length(val, params)
max_length = Len(val) <= CInt(params(0))
End Function
Function alphanumeric(val)
Dim rgx : Set rgx = New RegExp
rgx.Pattern = "^[A-Za-z0-9]+function test(val) { return val + " has been tested"; )
var myvar = "test"
Response.Write(this[myvar]("Thing"))
quot;
alphanumeric = rgx.Test(val)
End Function
Function validate(val, criterion)
Dim arrCriterion : arrCriterion = Split(criterion, "|")
Dim criteria
validate = True
For Each criteria in arrCriterion
Dim paramListPos : paramListPos = InStr(criteria, "(")
If paramListPos = 0 Then
validate = GetRef(criteria)(val)
Else
Dim paramList
paramList = Split(Mid(criteria, paramListPos + 1, Len(criteria) - paramListPos - 1), ",")
criteria = Left(criteria, paramListPos - 1)
validate = GetRef(criteria)(val, paramList)
End If
If Not validate Then Exit For
Next
End Function
Después de proporcionar esto, debo decir que si está familiarizado con PHP, entonces JScript sería una mejor opción en el servidor. En Javascript puede llamar a un método como este: -
<*>Otros consejos
Si está hablando de VBScript, no tiene ese tipo de funcionalidad. (al menos no que yo sepa) Podría intentarlo así:
Select myvar
case "test":
test
case "anotherSub":
anotherSub
else
defaultSub
end select
Ha pasado un tiempo desde que escribí VBScript (gracias a Dios), así que no estoy seguro de cuán buena es mi sintaxis.
EDITAR: otra estrategia
Personalmente, haría lo anterior, por razones de seguridad. Pero si absolutamente no le gusta, entonces puede intentar usar diferentes idiomas en su página. En el pasado, utilicé Javascript Y VBScript en mis páginas ASP clásicas (tanto en el lado del servidor) como pude llamar a las funciones declaradas en el otro idioma desde mi idioma actual. Esto fue especialmente útil cuando quería hacer algo con expresiones regulares, pero estaba en VBScript.
Puedes probar algo como
<script language="vbscript" runat="server">
MyJavascriptEval myvar
</script>
<script language="javascript" runat="server">
function MyJavascriptEval( myExpression)
{
eval(myExpression);
}
/* OR
function MyJavascriptEval( myExpression)
{
var f = new Function(myExpression);
f();
}
*/
</script>
No probé esto en una página ASP clásica, pero creo que está lo suficientemente cerca como para funcionar con pequeños ajustes.
La capacidad de PHP para llamar dinámicamente o crear funciones son hacks que conducen a malas prácticas de programación. Debe explicar lo que está tratando de lograr (no cómo) y aprender la forma correcta de codificar.
El hecho de que pueda hacer algo, no lo hace correcto o es una buena idea.
Utilice el " Ejecutar " declaración en ASP / VBScript.
Execute "Response.Write ""hello world"""
ASP no admite el enlace tardío de esta manera. ¿Qué estás tratando de hacer, en un sentido más amplio? Explique eso, y alguien puede mostrarle cómo lograrlo en asp.
Además, puede considerar "objetivar" La funcionalidad de validación. Hacer clases es posible (aunque no se usa ampliamente) en VB Script.
<%
Class User
' declare private class variable
Private m_userName
' declare the property
Public Property Get UserName
UserName = m_userName
End Property
Public Property Let UserName (strUserName)
m_userName = strUserName
End Property
' declare and define the method
Sub DisplayUserName
Response.Write UserName
End Sub
End Class
%>