ASP函数指针试探-GetRef

  近日在学习C++,看到函数指针,由于之前一直搞ASP,所以想ASP里面是否也有这个函数指针的东西,百度了一下,没有太多关于此方面的介绍,于是翻了翻VBScript手册,没让我失望,找到了GetRef这个函数,引用手册上的说明:

 

GetRef 函数

 

返回一个指向一过程的引用,此过程可绑定某事件。

Set object.eventname = GetRef(procname)

参数
object

必选项。事件所关联的对象的名称。

eventname

必选项。要与函数绑定的事件的名称。

procname

必选项。该字符串中包含 Sub 或 Function 过程的名称,该过程与事件关联。

说明
GetRef 函数可以用来将 VBScript 过程 (Function 或 Sub) 与 DHTML (动态 HTML)页面中可用的任何事件联系在一起。DHTML 对象模型为不同对象提供了与各种可用事件有关的信息。

在其他脚本和程序设计语言中,GetRef 所提供的功能被称为函数指针,即它指向了在指定事件发生时要执行的过程的地址。

下面的例子说明了 GetRef 函数的使用:

<SCRIPT LANGUAGE="VBScript">

Function GetRefTest()
  Dim Splash
  Splash = "GetRefTest Version 1.0"  & vbCrLf
  Splash = Splash & Chr(169) & " YourCompany 1999 "
  MsgBox Splash
End Function

Set Window.Onload = GetRef("GetRefTest")
</SCRIPT>

大概意思是为绑定事件所用,因为本人对ASP中事件了解不多,所以在这里对GetRef和事件的关系也不做过多的讨论。这里只研究下WEB开发应用中GetRef的用处。

在PHP里面,PHP不支持指针,因此无法使用函数指针这一技术。PHP支持所谓的“函数变量”,可以把函数赋予某个变量,其作用类似于函数指针。
简单点的例子:

PHP里面可以这么做

<?php
$funcname = "cutstr";
echo $funcname();

function cutstr() {
 return "function";
}
?>


有了GetRef,类似上面的功能ASP也可以实现:
<%
dim funcname
funcname = "cutstr"
response.Write(getref(funcname))

function cutstr()
 cutstr = "function"
end function
%>

 

实际应用:

在做后台管理的项目时,比如新闻添加,删除,修改,等操作在同一个页面处理,一般我们会在form里面插入一个隐藏域action,或者url参数action,根据action的值来判断操作哪一步。通常这么写:

select case request.querystring("action")
 case "add" : '要操作的代码段....
 case "modify" : '要操作的代码段....
end select

或者使用if else

 

使用“函数变量”可以使代码更加简洁、清晰,附上一个完整的例子,该例是后台中常用的一种操作。修改、删除、添加。
可以使用?action=×××来测试结果


<%
option explicit


dim array_action
'合法的模块名
array_action = array("list","add","add_form","modify","modify_form","del")


'输出
response.write(getref(action))


'检验参数是否合法
function action()
 dim str : str = request.querystring("action")
 action = array_action(0)
 if arr_in(array_action,str) then action = str
end function


'操作部分----------------------
function list()
 list = "显示列表信息"
end function


function add()
 add = "执行添加操作"
end function


function add_form()
 add_form = "显示添加表单"
end function


function modify()
 modify = "执行修改操作"
end function
'------------------------------


'检测是否存在于数组
function arr_in(a,v)
 arr_in = false
 dim i
 if isarray(a) then
  for each i in a
   if i = v then : arr_in = true : exit for : end if
  next
 end if
end function
%>

 

很多帖讨论ASP、PHP、.NET,到底哪个强,个人认为不是语言的问题,而是思想的问题,网站功能原理了解了,用什么语言写都一样,效率高不高、代码是否简洁明了,那就看自己的水平了。欢迎大家讨论!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值