你怎么称呼从ASP经典变量的方法?
-
22-07-2019 - |
题
例如,我怎样才能运行下面me.test?
myvar = 'test'
me.myvar
ASP查找方法“MYVAR”和没有找到它。在PHP中我可以简单地说我$ - > $ MYVAR但ASP的语法不变量和方法加以区分。建议?
与此密切相关,有没有在ASP经典一个method_exists功能?
提前感谢!
编辑:我正在写一个验证类,并想通过管道分隔字符串调用方法的列表。
因此,例如,以验证一个名称字段,我称之为:
validate("required|min_length(3)|max_length(100)|alphanumeric")
我喜欢具有单个线,显示一个给定字段被验证的所有方式的想法。和所述串的每一管道分隔部是这样的方法的名称。
如果你有一个更好的设置建议,我所有的耳朵!
解决方案
可以通过使用GetRef
功能实现这种在VBScript: -
Function Test(val)
Test = val & " has been tested"
End Function
Dim myvar : myvar = "Test"
Dim x : Set x = GetRef(myvar)
Response.Write x("Thing")
可否发送“物已经过测试”到客户端。
因此,这里是使用验证要求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]+$"
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
已经提供了这一点,我不得不说的是,如果您熟悉PHP随后的JScript将在服务器上更好的选择。在Javascript中,你可以这样调用一个方法: -
function test(val) { return val + " has been tested"; )
var myvar = "test"
Response.Write(this[myvar]("Thing"))
其他提示
如果你正在谈论的VBScript,它不具有这种功能。 (至少不是我的知识),我可能会尝试这样的:
Select myvar
case "test":
test
case "anotherSub":
anotherSub
else
defaultSub
end select
这已经有一段时间,因为我写的VBScript(感谢上帝),所以我不知道我的语法有多好。
EDIT-的另一种策略
就个人而言,我会做以上,出于安全原因。但是,如果你绝对不喜欢它,那么你可能需要使用您的网页上不同的语言去尝试。我已经在过去使用JavaScript和VBScript中对我的经典ASP页(服务器端),并能够调用其他语言声明的函数从我目前的语言。在此之前特别方便,当我想要做的使用正则表达式的东西,但在VBScript。
您可以尝试像
<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>
我没有在传统的ASP页面来测试这一点,但我认为这是足够接近,它会与小的调整工作。
PHP的能力,动态调用或创建功能是导致贫穷的编程实践黑客。你需要解释一下你要完成(而不是如何)什么,并学习正确的方式代码。
因为你可以做一些事情,并没有作出正确的还是不错的主意。
使用在ASP / VBScript的 “执行” 的语句。
Execute "Response.Write ""hello world"""
ASP不支持以这种方式后期绑定。什么是你想干什么,在更大的意义?解释说,有人可以告诉你如何完成它在ASP。
此外,你可以考虑“客观化”的验证功能。制作类是可能的(虽然不是广泛地使用)中VB脚本。
<%
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
%>