เพื่อนที่เคยใช้ PHP รู้ดีว่าการใช้ตัวแปรใน PHP นั้นยืดหยุ่นและสะดวกสบาย โดยเฉพาะการแปลงค่าชื่อตัวแปรในสตริงสามารถเข้าใจได้ง่าย ทำให้โค้ด PHP ทั้งหมดกระชับและสวยงามยิ่งขึ้น ตัวอย่างเช่น คำสั่ง SQL เพื่ออัพเดตฐานข้อมูลจำเป็นต้องเขียนเป็น:
รหัสโปรแกรม
"อัปเดตผู้ใช้ตั้งรหัสผ่าน='$password', group=$group, name='$username' โดยที่ account='$account'"
, $password, $group, $username, $account จะถูกแทนที่ด้วยค่าตัวแปรจริง เพื่อให้บรรลุฟังก์ชันเดียวกันใน ASP จะต้องเขียนเป็น:
รหัสโปรแกรม
"อัปเดตผู้ใช้ตั้งรหัสผ่าน ='" & รหัสผ่าน & "',group=" & group & ",name='" & ชื่อผู้ใช้ & "' โดยที่บัญชี ='" & บัญชี & "'"
, ดูยาวและน่าเกลียด หากเป็นภาษาแทรกและมีฟิลด์ที่แทรกจำนวนมาก การตรวจสอบความสอดคล้องระหว่างฟิลด์และค่าต่างๆ จะเป็นกระบวนการที่ยุ่งยาก
ตอนนี้เรามาดูวิธีการใช้การแปลงชื่อ-ค่าตัวแปรที่คล้ายกันใน ASP
แนวคิด
ก็คือก่อนอื่นจะต้องมีวิธีแยกแยะชื่อตัวแปรที่ต้องถูกแทนที่ด้วยค่าจริงจากข้อความธรรมดา จากนั้นแทนที่ชื่อตัวแปรที่พบทั้งหมดด้วยค่าจริงที่เป็นตัวแทน
จุดแรกสามารถพบได้ผ่านนิพจน์ทั่วไป ในที่นี้เราไม่ได้ใช้การแสดงตัวแปรของ PHP แต่ใช้ตัวเลขขนาดใหญ่ {} เป็นอักขระขอบเขตของชื่อตัวแปร กลุ่ม}.
จุดที่สองคือกุญแจสำคัญในการแปลงค่าชื่อตัวแปร เมื่อดูข้อมูล ASP เราไม่พบวิธีการนำไปใช้งานโดยตรง แต่มีฟังก์ชัน Execute ที่ดึงดูดความสนใจของเรา จากคำอธิบายข้อมูล เรารู้ว่า Execute สามารถดำเนินการสตริงที่ถูกต้องที่เข้ามาเป็นการซิงโครไนซ์การเรียกใช้โค้ดในลักษณะนี้ เราจำเป็นต้องเขียนฟังก์ชันเล็กๆ เท่านั้นเพื่อให้บรรลุเป้าหมายของเรา รหัสหลักคือ:
รหัสโปรแกรม
ฟังก์ชั่น GetVar (var_name)
ดำเนินการ("ฟังก์ชั่น get_value(): get_value=" & var_name & `: สิ้นสุดฟังก์ชั่น")
getvar=get_value()
ฟังก์ชั่นสิ้นสุด
ใช้
โค้ดที่สมบูรณ์:
รหัสโปรแกรม
'DESIGN BY: Peng Guohui
'เว็บไซต์: http://kacarton.yeah.net/
'บล็อก: http://blog.csdn.net/nhconch
'อีเมล: [email protected]
'บทความนี้เป็นต้นฉบับของผู้เขียน โปรดติดต่อฉันก่อนที่จะพิมพ์ซ้ำ'
'=================================================' = ================
ฟังก์ชัน GetVar (var_name)
ดำเนินการ("ฟังก์ชั่น get_value(): get_value=" & var_name & `: สิ้นสุดฟังก์ชั่น")
getvar=get_value()
ฟังก์ชันสิ้นสุด
ฟังก์ชัน Txt2Value(str, ระดับ)
regEx สลัว, การแข่งขัน, ผลลัพธ์
ตั้งค่า regEx = RegExp ใหม่
เลือกระดับกรณี
case 0 regEx.Pattern = "{([w()]+)}" 'ชื่อตัวแปรถูกต้อง
กรณีที่ 1 regEx.Pattern = "{([w+-*/\<>=()]+)}" 'ชื่อตัวแปรและตัวดำเนินการถูกต้อง
'case 2 regEx.Pattern = "{([ws()]+)}" 'อักขระทั้งหมดยกเว้นอักขระขึ้นบรรทัดใหม่ถูกต้อง
กรณีอื่นออกจากฟังก์ชัน
สิ้นสุดการเลือก
'regEx.Pattern = "{(w+)}"
regEx.IgnoreCase = จริง
regEx.Global = จริง
ตั้งค่าการจับคู่ = regEx.Execute(str)
ผลลัพธ์ = STR
'response.write ตรงกันนับ
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
ผลลัพธ์ = แทนที่ (ผลลัพธ์, Match.Value, GetVar (Match.SubMatches(0)))
ต่อไป
ตั้งค่าการจับคู่ = ไม่มีเลย
ตั้งค่า regEx = ไม่มีเลย
Txt2Value = ผลลัพธ์
ฟังก์ชันสิ้นสุด
ฟังก์ชัน Var2Value(var_name)
Var2Value = Txt2Value(var_name, 0)
สิ้นสุดฟังก์ชัน
วิธีการโทร:
รหัสโปรแกรม
Var2Value("update users set password='{password}', group={group}, name='{username}' โดยที่ account='{account}'"
Var2Value เรียก Txt2Value, Txt2Value ค้นหาชื่อตัวแปรทั้งหมดและการเรียก GetVar รับ ค่าตัวแปรและแทนที่ ที่จริงแล้ว การเรียก Txt2Value(str,1) โดยตรงยังอนุญาตให้ดำเนินการทางคณิตศาสตร์สี่รายการกับค่าสตริงได้