لقد كنت أدرس لغة C++ مؤخرًا ورأيت مؤشرات وظيفية منذ أن كنت أعمل على ASP من قبل، وتساءلت عما إذا كان هناك مثل هذا المؤشر الوظيفي في ASP، وبحثت في Baidu ووجدت أنه لا يوجد الكثير من المقدمة حول هذا الجانب، لذلك قمت بذلك لقد بحثت في دليل VBScript ولم أتمكن من العثور عليه، وقد شعرت بخيبة أمل ووجدت وظيفة GetRef، واقتبست وصف وظيفة GetRef في الدليل.
إرجاع مرجع إلى الإجراء الذي يمكن ربط الحدث به.
تعيين اسم الحدث = GetRef(procname)
المعلمة
هدف
مطلوب. اسم الكائن المرتبط بالحدث.
اسم الحدث
مطلوب. اسم الحدث المراد ربطه بالوظيفة.
procname
مطلوب. تحتوي هذه السلسلة على اسم الإجراء الفرعي أو الدالة المرتبط بالحدث.
يوضح
يمكن استخدام الدالة GetRef لربط إجراء VBScript (الدالة أو الفرعية) بأي حدث متوفر في صفحة DHTML (HTML الديناميكي). يوفر نموذج كائن DHTML معلومات حول العديد من الأحداث المتوفرة لكائنات مختلفة.
في لغات البرمجة النصية والبرمجة الأخرى، تُعرف الوظيفة التي يوفرها GetRef بمؤشر الوظيفة، أي أنها تشير إلى عنوان الإجراء الذي سيتم تنفيذه عند وقوع حدث محدد.
يوضح المثال التالي استخدام الدالة GetRef:
انسخ رمز الكود كما يلي:
<لغة البرنامج النصي=VBScript>
الدالة GetRefTest()
خافت سبلاش
Splash = GetRefTest الإصدار 1.0 وvbCrLf
سبلاش = سبلاش آند إتش آر (169) وشركتك 1999
مسجبوكس سبلاش
وظيفة النهاية
تعيين Window.Onload = GetRef(GetRefTest)
</النص>
ربما يعني ذلك أنه يتم استخدامه لربط الأحداث، وبما أنني لا أعرف الكثير عن الأحداث في ASP، فلن أناقش الكثير حول العلاقة بين GetRef والأحداث هنا. نحن هنا ندرس فقط استخدام GetRef في تطبيقات تطوير الويب.
في PHP، PHP لا يدعم المؤشرات، لذلك لا يمكن استخدام تقنية مؤشر الوظيفة. تدعم لغة PHP ما يسمى بمتغيرات الوظائف، والتي يمكنها تعيين وظائف لمتغير، وتكون وظائفها مشابهة للمؤشرات الوظيفية.
مثال أبسط:
يمكنك القيام بذلك في PHP
انسخ رمز الكود كما يلي:
<?php
$funcname = Cutstr;
صدى $funcname();
وظيفة قطع () {
وظيفة العودة
}
?>
باستخدام GetRef، يمكن لـ ASP أيضًا تنفيذ وظائف مشابهة لما ورد أعلاه:
<%
اسم وظيفة خافت
funcname = Cutstr
استجابة. الكتابة (getref (اسم الوظيفة))
وظيفة قطع ()
Cutstr = function
وظيفة النهاية
%>
التطبيقات العملية:
عند تنفيذ مشاريع إدارة الخلفية، مثل إضافة الأخبار وحذفها وتعديلها، تتم معالجة العمليات الأخرى في نفس الصفحة. بشكل عام، سنقوم بإدراج إجراء حقل مخفي في النموذج، أو إجراء معلمة URL، وتحديد الخطوة العملية مبنية على قيمة الفعل. عادة ما تكتب هكذا:
حدد طلب الحالة.querystring(الإجراء)
إضافة حالة: 'مقطع التعليمات البرمجية المطلوب تشغيله....
تعديل الحالة: 'مقطع الكود الذي سيتم تشغيله....
حدد النهاية
أو استخدم إذا كان آخر
يمكن أن يؤدي استخدام متغيرات الوظائف إلى جعل التعليمات البرمجية أكثر إيجازًا ووضوحًا، ومرفق مثال كامل، وهي عملية شائعة الاستخدام في الخلفية. تعديل، حذف، إضافة.
يمكنك استخدام ?action=××× لاختبار النتائج
انسخ رمز الكود كما يلي:
<%
الخيار صريح
خافت array_action
'اسم الوحدة القانونية
array_action = array(list,add,add_form,modify,modify_form,del)
"الإخراج."
الاستجابة. الكتابة (getref (الإجراء))
"تحقق مما إذا كانت المعلمات قانونية."
عمل الوظيفة ()
خافت str : str = request.querystring(action)
الإجراء = array_action(0)
إذا arr_in(array_action,str) ثم action = str
وظيفة النهاية
'جزء العملية ----------------------
قائمة الوظائف ()
القائمة = عرض معلومات القائمة
وظيفة النهاية
إضافة وظيفة ()
إضافة = تنفيذ عملية الإضافة
وظيفة النهاية
الدالة add_form()
add_form = إظهار نموذج الإضافة
وظيفة النهاية
تعديل الوظيفة ()
تعديل = إجراء عملية التعديل
وظيفة النهاية
'--------------------------------
"تحقق مما إذا كان موجودًا في المصفوفة."
الدالة arr_in(a,v)
arr_in = خطأ
خافت أنا
إذا كان isarray(a) إذن
لكل أنا في
إذا i = v ثم: arr_in = true: الخروج من أجل: end if
التالي
نهاية إذا
وظيفة النهاية
%>
تناقش العديد من المنشورات ASP وPHP و.NET. أيهما أفضل؟ شخصيًا، أعتقد أنها ليست مشكلة لغوية، ولكنها مشكلة تفكير بمجرد فهم المبادئ الوظيفية للموقع، مهما حدث اللغة التي تستخدمها في كتابتها هل هي فعالة؟ هل الكود موجز وواضح؟ الجميع مدعوون للمناقشة!