Недавно я изучал C++ и увидел указатели на функции. Поскольку я раньше работал над ASP, мне стало интересно, есть ли такой указатель на функцию в ASP. Я поискал в Baidu и обнаружил, что об этом аспекте мало что известно, поэтому я начал изучать C++. просмотрел руководство по VBScript и не нашел его. Я был разочарован и нашел функцию GetRef. Я процитировал описание функции GetRef в руководстве.
Возвращает ссылку на процедуру, к которой может быть привязано событие.
Установить object.eventname = GetRef(procname)
параметр
объект
Необходимый. Имя объекта, связанного с событием.
имя события
Необходимый. Имя события, которое будет привязано к функции.
прокнамя
Необходимый. Эта строка содержит имя процедуры Sub или Function, связанной с событием.
иллюстрировать
Функцию GetRef можно использовать для связи процедуры VBScript (функции или подпрограммы) с любым событием, доступным на странице DHTML (динамический HTML). Объектная модель DHTML предоставляет информацию о различных доступных событиях для разных объектов.
В других языках сценариев и программирования функциональность, предоставляемая GetRef, известна как указатель на функцию, то есть она указывает на адрес процедуры, которая будет выполняться при возникновении указанного события.
Следующий пример иллюстрирует использование функции GetRef:
Скопируйте код кода следующим образом:
<ЯЗЫК СКРИПТА=VBScript>
Функция ПолучитьRefTest()
Тусклый всплеск
Splash = GetRefTest версии 1.0 и vbCrLf
Всплеск = Всплеск и Chr(169) и YourCompany 1999
Заставка MsgBox
Конечная функция
Установите Window.Onload = GetRef(GetRefTest)
</СКРИПТ>
Вероятно, это означает, что он используется для привязки событий. Поскольку я мало что знаю о событиях в ASP, я не буду здесь слишком подробно обсуждать связь между GetRef и событиями. Здесь мы изучаем только использование GetRef в приложениях WEB-разработки.
В PHP PHP не поддерживает указатели, поэтому технологию указателей функций использовать нельзя. PHP поддерживает так называемые функциональные переменные, которые могут присваивать функции переменной, и их функции аналогичны указателям на функции.
Более простой пример:
Вы можете сделать это в PHP
Скопируйте код кода следующим образом:
<?php
$имя_функции = CutStr;
эхо $имя_функции();
функция Cutstr() {
функция возврата;
}
?>
С помощью GetRef ASP также может реализовать функции, аналогичные приведенным выше:
<%
тусклое имя функции
имя_функции = CutStr
ответ.Write(getref(имя_функции))
функция CutStr()
Cutstr = функция
конечная функция
%>
Практическое применение:
При выполнении проектов фонового управления, таких как добавление, удаление, изменение новостей и другие операции, они обрабатываются на одной и той же странице. Как правило, мы вставляем в форму действие скрытого поля или действие параметра URL-адреса и определяем, какой шаг. действие основано на ценности действия. Обычно пишут так:
выберите случай request.querystring(действие)
case add: 'Сегмент кода, который будет работать....
Case Modify : 'Сегмент кода, который будет работать....
конец выбора
Или используйте if else
Использование функциональных переменных может сделать код более кратким и понятным. Прилагается полный пример часто используемой операции в фоновом режиме. Изменить, удалить, добавить.
Вы можете использовать ?action=××× для проверки результатов.
Скопируйте код кода следующим образом:
<%
опция явная
тусклый массив_действие
'Юридическое имя модуля
array_action = массив (список, добавить, добавить_форму, изменить, изменить_форму, del)
'Выход
response.write(getref(действие))
'Проверяем, допустимы ли параметры
действие функции()
dim str: str = request.querystring(действие)
действие = действие_массива(0)
если arr_in(array_action,str), то действие = str
конечная функция
'Рабочая часть ----------------------
список функций()
list = отображать информацию о списке
конечная функция
функция добавить()
add = выполнить операцию добавления
конечная функция
функция add_form()
add_form = показать форму добавления
конечная функция
функция изменения()
модифицировать = выполнить операцию модификации
конечная функция
'--------------------------------
'Проверяем, существует ли он в массиве
функция arr_in(a,v)
arr_in = ложь
тусклый я
если isarray(a), то
для каждого я в
если я = v, то: arr_in = true: выход для: конец, если
следующий
конец, если
конечная функция
%>
Во многих сообщениях обсуждаются ASP, PHP и .NET. Лично я считаю, что это не языковая проблема, а проблема мышления. Как только вы поймете функциональные принципы веб-сайта, все будет одинаково. язык, на котором вы его пишете. Насколько он эффективен? Является ли код кратким и понятным? Тогда это зависит от вашего уровня. Приглашаем всех к обсуждению!