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