บทความ

เทคนิคการแปลง PHP ไปเป็น ASP.NET

เรตติ้ง
เขียนโดย admin เมื่อวันที่ 01 March 2008 ตอน 23:03

ใช้ได้กับ

  • Microsoft ASP.NET
  • Microsoft Visual Basic .NET

สรุป:   เรียนรู้เกี่ยวกับเทคนิคการแปลงจาก  PHP  ไปเป็น  ASP.NET  เรียนรู้เกี่ยวกับคุณสมบัติ  ฟังก์ชัน  และโครงสร้างของระบบทั้งสองชนิด

บทความชิ้นนี้จะพูดถึงวิธีการแปลงจาก  PHP (PHP:Hypertext Preprocessor 4) ไปเป็น ASP.NET โดยจะทำการเปรียบเทียบจุดเหมือนและจุดต่างระหว่างซินแทกซ์พื้นฐานของ  PHP  กับ  Microsoft Visual Basic .NET รวมทั้งฟังก์ชันและโครงสร้างที่อยู่ภายในระบบทั้งสองชนิดอีกด้วย

แม้ว่าทั้ง  PHP และ ASP.NET ยอมให้คุณสร้างเว็บแอพพลิเคชันที่ซับซ้อนขึ้นมาได้เหมือนกันก็ตาม (อาทิเช่นเว็บไซต์อีคอมเมิร์ซ  อินทราเน็ต และประตูท่าสู่องค์กร) แต่ PHP และ ASP.NET ก็มีข้อแตกต่างกันหลายประการเชนกัน สิ่งที่ต่างจาก  PHP ก็คือ ASP.NET ไม่ใช่ภาษาหรือ parser แต่ ASP.NET เป็นชุดเทคโนโลยีซึ่งอยู่ใน Microsoft .NET  Framework  ที่ใช้สำหรับสร้างเว็บแอพพลิเคชันและเว็บเซอร์วิส  XML ขึ้นมามากกว่า เพจของ Microsoft ASP.NET  จะประมวลผลในเซิร์ฟเวอร์เหมือนกับ  PHP  จากนั้นก็สร้างมาร์กอัพขึ้นมา  อาทิเช่น HTML, WML หรือ XML  เป็นต้น  ซึ่งจะถูกส่งไปยังพีซีหรือโมไบล์แอพพลิเคชันอีกต่อหนึ่ง ส่วน ASP.NET ต่างออกไปในแง่ที่ว่ามันเป็นโมเดลเขียนโปรแกรมที่อิงกับเหตุการณ์ในรูปของออปเจ็กต์ประสิทธิภาพสูง  ซึ่งใช้สำหรับการพัฒนาเว็บเพจขึ้นมาได้พร้อมทั้งยังคงรูปแบบที่เรียบง่าย ซึ่งนักพัฒนา PHP คุ้นเคยเอาไว้เหมือนเดิม

แอพพลิเคชันของ  ASP.NET อิงกับแนวทาง Object Oriented Programming (OOP) ประสิทธิภาพสูง แทนที่จะใช้แนวทางการเขียนสคริปท์ขึ้นมา  วิธีการของไมโครซอฟท์จะช่วยให้มีการใช้คุณสมบัติ  OOP  ได้อย่างมีประสิทธิภาพมากกว่า  อาทิเช่น  inheritance, encapsulation และ reflection เป็นต้น แม้ว่าการทำงานแบบพื้นๆส่วนใหญ่สามารถแปลงจาก  PHP ไปเป็น ASP.NET ได้โดยง่ายก็ตาม แต่เราไม่อาจแปลงแอพพลิเคชันที่ซับซ้อนจาก PHP ไปเป็น  ASP.NET  ได้โดยง่าย และจำเป็นต้องมีการวางแผนอย่างรอบคอบเสียก่อน รวมทั้งต้องอิงกับแนวทาง OOP ให้มากขึ้นกว่าเดิมอีกด้วย

เนื้อหาของบทความนี้  เราคาดหวังว่าผู้อ่านมีประสบการณ์เกี่ยวกับ PHP การเขียนโปรแกรม และการพัฒนาซอฟต์แวร์เป็นอย่างดีอยู่แล้ว  เราจะเริ่มต้นเนื้อหาของบทความโดยทำการเปรียบเทียบข้อแตกต่างของโครงสร้าง รวมทั้งพูดถึงโมเดลการพัฒนาแบบ   OOP  ตามด้วยการเปรียบเทียบคุณสมบัติ  ต่อด้วยการเปรียบเทียบซินแทกซ์และการทำงานพื้นฐานที่ใช้ในการพัฒนาเว็บแอพพลิเคชันโดยใช้ PHP และ ASP.NET

หมายเหตุ:  ถ้าหากคุณไม่ต้องการศึกษารายละเอียดวิธีการแปลงโปรแกรม แต่ต้องการทดสอบ ASP.NET เราขอแนะนำให้คุณข้ามไปยังหัวข้อ "คำแนะนำสำหรับการทำงานขั้นต่อไป" ได้เลย

เปรียบเทียบโครงสร้าง

ถ้าหากคุณอ่านเนื้อหาส่วนที่เป็นการเปรียบเทียบซินแทกซ์และภาษาในช่วงท้ายบทความนี้แล้ว  คุณจะพบว่า  PHP  และ ASP.NET  มีความคล้ายคลึงกันอย่างมากในแง่ของฟังก์ชันและซินแทกซ์  อย่างไรก็ตาม PHP แตกต่างจาก ASP.NET อย่างมากที่โครงสร้างระดับล่าง   โดยที่   PHP   อิงอยู่กับโพรเซสเซอร์/กลไกซึ่งไม่ผูกติดกับแพลตฟอร์มที่ประมวลผลสคริปท์ PHP เพื่อใช้สำหรับการติดต่อกับดาต้าเบส การทำงานตามเงื่อนไขของอินเทอร์เน็ตโพรโตคอล และงานพื้นฐานอื่นๆอีกมากสำหรับเว็บแอพพลิเคชันแพลตฟอร์ม

ส่วน  ASP.NET เป็นเฟรมเวิร์กที่สร้างขึ้นมาจากเทคโนโลยีหลายชนิด อาทิเช่น CLR เป็นต้น แถมยังมีคลาสไลบราลีเป็นระเบียบที่กว้างขวางครอบคลุม  เพื่อนำไปใช้เป็นชุดฟังก์ชันส่วนใหญ่ที่ใช้ในเว็บแอพพลิเคชันได้  นอกจากนั้นคุณยังสามารถสร้างคอมโพเน้นต์เพื่อขยายขอบเขตการทำงานของเฟรมเวิร์กได้โดยง่ายอีกด้วย

แม้  PHP มีองค์ประกอบที่คล้ายคลึงกัน (อาทิเช่นไลบราลี PEAR) ก็ตาม แต่ PHP และ ASP.NET ก็ไม่ได้เหมือนกันเสียทีเดียว  เนื่องจากเฟรมเวิร์ก  ASP.NET สร้างขึ้นมาใหม่บนแนวทาง OOP และแนวคิดของ OOP แต่ PHP กลับไม่ได้เป็นแบบนั้น  ความแตกต่างดังกล่าวจะเห็นได้อย่างชัดเจนมากขึ้นในตอนที่คุณเรียกใช้คลาสและออปเจ็กต์ใน PHP และ ASP.NET

การเขียนโปรแกรมเชิงออปเจ็กต์ใน PHP และ ASP.NET

ทั้ง  PHP  และ  ASP.NET ใช้แนวทาง OOP ในการพัฒนาแอพพลิเคชันเหมือนกัน แต่ทว่าการทำงานกับแนวคิด OOP แบบต่างๆกลับแตกต่างกันออกไป  อาทิเช่น  encapsulation  และ  polymorphism เป็นต้น ตัวอย่างเช่น PHP รองรับการทำ encapsulation ได้เพียงบางส่วนเท่านั้น (อาทิเช่นการกำหนด methods และฟิลด์ในคลาสเป็นต้น) และทำ  polymorphism ได้เพียงบางส่วน (ไม่มี overloading ไม่มี abstraction) นอกจากนั้น PHP ยังขาดแนวคิดหลายอย่างไปอาทิเช่นการไม่สามาารถกำหนดให้ฟังก์ชันเป็นแบบ  private,  public หรือ protect ในคลาส  รวมทั้ง  overloading  ด้วย แม้ว่าผู้ที่สนับสนุน OOP อาจออกมาแย้งว่า ASP.NET และภาษาอื่นๆก็ไม่ได้ใช้งานกับแนวคิดทุกอย่างของแนวทาง  OOP  เช่นกัน คำพูดดังกล่าวเป็นความจริงที่เกิดขึ้นกับภาษาส่วนใหญ่ที่ทำงานแบบ OOP ได้อาทิ C++ และจาวาเป็นต้น

เรื่องนี้มีทั้งข้อดีและข้อเสีย  ข้อเสียก็คือนักพัฒนาเว็บบางคนอาจจะต้องเสียเวลาในการเรียนรู้  ASP.NET  นานกว่า PHP  เนื่องจาก PHP ใช้แนวทางการเขียนสคริปท์ที่นักพัฒนาใช้ในการสร้างเว็บไซต์อยู่แล้ว อย่างไรก็ตามนักพัฒนาที่มีภูมิหลังเรื่องภาษา OOP และ/หรือ Vwill จะคุ้นเคยและเรียนรู้ ASP.NET ได้โดยง่ายเช่นกัน

ข้อดีของการที่  ASP.NET  สนับสนุนแนวคิด  OOP หมายความว่าแอพพลิเคชัน ASP.NET ส่วนใหญ่จะมีโค้ดที่ออกแบบมาดีกว่า  แยกแยะเนื้อหาโลจิกและข้อมูลได้ชัดเจนมากกว่า  ดังนั้นการให้บริการตลอดวงจรชีวิตการใช้แอพพลิเคชันที่ยาวนานจึงทำได้ง่ายกว่า   นอกจากนั้นการที่  ASP.NET  สามารถทำงานกับเทคโนโลยีเอนเตอร์ไพรซ์ชนิดต่างๆได้โดยตรง  อาทิเช่น  Message  Queuing,  Transactions (พบได้ในคลาส System EnterpriseServices ของ  .NET  Framework) SNMP และเว็บเซอร์วิสเป็นต้น ดังนั้นการพัฒนาแอพพลิเคชันประสิทธิภาพสูงที่ขยายระบบได้จึงทำได้ง่ายกว่า

คุณสามารถอ่านเนื้อหาเบื้องต้นขององค์ประกอบหลักสำหรับการเขียนโปรแกรมเชิงออปเจ็กต์   (จากมุมมองของภาษา Visual Basic) ในหัวข้อ Object-Oriented Programming ใน Visual Basic

การคอมไพล์

PHP

เมื่อมีการเรียกเพจ  PHP  ระบบจะทำการคอมไพล์  HTML  และสคริปท์  PHP  ไปเป็น  Zend Opcodes โดยที่ Opcodes   เป็นคำสั่งไบนารีระดับต่ำที่ใช้เพื่อรองรับการทำงานของเพจ   PHP  ซึ่งเมื่อมีการคอมไพล์แล้ว  Zend Engines  จะสั่งงาน  opode  (คล้ายคลึงกับวิธีการที่กลไกรันไทม์ของจาวาสั่งงานไบท์โค้ด)  จากนั้นก็มีการสร้าง HTML ขึ้นมาแล้วส่งไปยังไคล์เอ็นต์

ในตลาดมีผลิตภัณฑ์เชิงพาณิชย์หลายชนิดที่สามารถนำมาใช้เพื่อเพิ่มความเร็วในการประมวลผลเพจ    PHP   ได้โดยการปรับแต่งให้  opcodes ทำงานได้อย่างเต็มประสิทธิภาพ วิธีการอื่นๆที่ช่วยเพิ่มประสิทธิภาพของสคริปท์ PHP ประกอบด้วยการทำแคชให้แก่ opcode และการทำแคชให้แก่ HTML ที่สร้างขึ้นมาเป็นต้น

ASP.NET

เมื่อมีคำสั่งส่งไปยัง  IIS  (Internet Information Services) หรือเว็บเซิร์ฟเวอร์ชนิดอื่นๆเพื่อเรียกเพจ .aspx  (หรือนามสกุลอื่นๆที่ใช้กับ ASP.NET ได้) คำสั่งจะถูกส่งไปยัง ASP.NET เพื่อทำการประมวลผล ถ้าหากเป็นการเรียกเพจเป็นครั้งแรก  ASP.NET  จะทำการคอมไพล์เพจไปเป็น  MSIL (ภาษาที่ใช้ชั่วคราวของไมโครซอฟท์) จากนั้น CLR (common language runtime) จะทำการประมวลผลโค้ด MSIL ไปเป็นภาษาเครื่อง ต่อมาคำสั่งจะเริ่มทำงานโดยใช้โค้ดที่คอมไพล์แล้ว โค้ดภาษาเครื่องชุดนี้จะจัดการกับคำสั่งครั้งต่อๆไปเอง ถ้าหากเพจไม่มีการแก้ไข

สิ่งสำคัญที่ต้องบอกเอาไว้ก็คือไบนารีโค้ดซึ่งสร้างขึ้นมาโดย  CLR จะสมบูรณ์แบบมากที่สุดอยู่แล้ว โดยไม่จำเป็นต้องใช้ผลิตภัณฑ์เสริมเพื่อทำให้ประสิทธิภาพดีขึ้น

สิ่งสำคัญอีกอย่างหนึ่งก็คือทุกอย่างใน  ASP.NET จะถูกคอมไพล์เป็นภาษาเครื่องก่อนที่จะทำงาน แม้แต่ข้อความ HTML ก็จะถูกแปลงไปเป็น  string  literal control และถูกใส่เอาไว้เรียงตามลำดับที่ถูกต้องในโครงสร้างควบคุมก็ตาม

เปรียบเทียบคุณสมบัติ

คุณสมบัติ

PHP

ASP.NET

ภาษาที่ใช้เขียนโค้ด

C, ภาษาเขียนสคริปทสไตล์ C++ พร้อมกับใช้ mark up สไตล์ ASP รุ่นเก่า รองรับแนวคิด OOP ได้บางส่วน

ใช้ได้กับ  25 ภาษา แต่ภาษาที่ได้รับความนิยมมากที่สุด 2 ชนิดก็คือ Visual Basic .NET และ C# นักพัฒนาส่วนใหญ่เลือกใช้ภาษาเพียงภาษาเดียว แต่สามารถใช้ร่วมกับคอมโพเน้นต์ที่เขียนขึ้นมาจากภาษาอื่นๆใน 25 ภาษานี้ได้

แนวคิดเรื่องแอพพลิเคชันที่คอมไพล์แล้ว

สามารถคอมไพล์และสั่งงานเป็นโปรแกรมที่ประมวลผลได้

ทำได้ ทั้งในรูปของการคอมไพล์ขณะทำงาน และการคอมไพล์เอาไว้ก่อน

การทำแคชเพจเอาท์พุดทั้งหมด

ไม่มีบริการโดยตรง

ทำได้  สามารถทำแคชเพจเวอร์ชันต่างๆโดยอิงกับตัวแปรตั้งแต่หนึ่งแบบขึ้นไปของ URL ประเภทของบราวเซอร์ ฟังก์ชันเฉพาะ หรือเงื่อนไขผสมผสานอื่นๆ

การทำแคชเพจเอาท์พุดบางส่วน

ไม่มีบริการโดยตรง

มีบริการในตัวผ่านการใช้  User  Controls  เราสามารถทำแคชข้อมูลและออปเจ็กต์อื่นๆ  พ่วงกับการกำหนดกฎเกณฑ์หมดอายุการใช้งานที่ซับซ้อนได้โดยใช้ Cache API ก็ได้

การเรียกใช้ดาต้าเบส

มีไดรเวอร์สำหรับดาต้าเบสส่วนใหญ่ที่มีอยู่ในตลาด รวมทั้งดาต้าเบสแบบเปิดเผยซอร์ซโค้ดด้วย

รองรับการทำงานกับ  OLE-DB  และ  ODBC  โดยตรง  รวมทั้งมีไดรเวอร์โดยตรงสำหรับ  Microsoft  SQL Server และ Oracle อีกด้วย

ดาต้าเบสเอาท์พุด

ชุดข้อมูลจะถูกส่งกลับมาในรูปตัวแปรของ PHP และสามารถส่งเอาท์พุดออกไปเหมือนกับตัวแปรอื่นๆ

ทำเท็มเพล็ตการเชื่อมข้อมูลไปยังระบบควบคุมในฝั่งของเซิร์ฟเวอร์เพื่อช่วยให้การพัฒนาทำได้ง่ายขึ้น  หรือทำลูปด้วยตนเองก็ได้ตามความพอใจ

คอมโพเน้นท์ภายนอก

นักพัฒนาสามารถเรียกแพกเก็จได้หลายชนิด  และยังสามารถแก้ไขกลไก  Zend  ได้โดยตรงอีกด้วย เนื่องจากเป็นซอฟต์แวร์แบบเปิดเผยซอร์ซโค้ด นอกจากนั้นโปรแกรมเมอร์ที่รับผิดชอบ Zend อยู่กำลังหาทางทำให้ PHP เรียกใช้ออปเจ็กต์ของ .NET ได้อีกด้วย

รองรับการทำงานของไลบราลี  C และออปเจ็กต์ COM ได้ดีมาก รวมทั้งแอลเซมบลีที่สร้างขึ้นมาโดยใช้ภาษาต่างๆที่ตรงตามมาตรฐาน .NET อาทิเช่น Managed C++ เป็นต้น แต่ไม่มีบริการออปเจ็กต์ CORBA หรือจาวาคลาสโดยตรง

XML/XSLT

ทำงานผ่านแพกเก็จเสริมและไลบราลี

มีบริการที่ใช้ง่ายและครอบคลุมสำหรับ  XML  DOM,  XSLT,  ระบบตรวจสอบความถูกต้องและมี  lightweight stream-oriented parsing สำหรับเอกสาร XML ด้วย

XML เว็บเซอร์วิส

ในปัจจุบันมีการพัฒนาแพกเก็จ  PHP  ให้รองรับการทำงานเว็บเซอร์วิสโดยอิงกับกลไก Apahe AXIS รวมทั้งกลไกอื่นๆด้วย

ซอฟต์รุ่นปัจจุบันใช้งานกับ  XML เว็บเซอร์วิสได้อย่างครบถ้วนและคล่องตัว ซึ่งจะทำให้การเผยแพร่และใช้เว็บเซอร์วิสทำได้ง่ายมาก

สภาพของเซสชัน

บริหารเซสชันโดยอิงกับคุ๊กกี้

สภาพเซสชันโดยอิงกับคุ๊กกี้หรือไม่มีคุ๊กกี้ก็ได้โดยใช้  in-memory  store  ในเซิร์ฟเวอร์เพียงเครื่องเดียว เซิร์ฟเวอร์จุดศูนย์กลาง   หรือดาต้าเบสแบกเอนด์ก็ได้   นอกจากนั้นโครงสร้างที่ขยายขอบเขตได้ยังช่วยให้มีการสร้างโมดูลสภาพเซสชันลักษณะเฉพาะขึ้นมา  เพื่อนำไปใช้แทนที่ออปชันต่างๆที่มีอยู่เดิมก็ได้ เซสชันที่ไม่มีคุ๊กกี้อาศัยการแก้ไขตัวแปรเพียงชุดเดียวก็ใช้งานได้แล้ว

ฟังก์ชันในตัว

PHP  มีฟังก์ชันในตัวที่ครอบคุมงานพื้นฐานต่างๆที่เว็บแอพพลิชันต้องทำ  นอกจากนั้น  PHP ยังเรียกใช้จาวาคลาสไลบราลีได้ โดยการเขียนโปรแกรมพิเศษเพิ่มเติม

ASP  .NET  สามารถเรียกใช้คลาสไลบราลีทั้งหมดของ .NET Framework ได้ ซึ่งประกอบด้วยฟังก์ชันเป็นจำนวนมาก

regular expression

รองรับซินแทกซ์ expression ปกติที่คอมแพททิเบิลกับ POSIX และ Perl

รองรับซินแทกซ์  regular  expression ที่คอมแพตทิเบิลกับ Perl-5 พร้อมทั้งมีคุณสมบัติอื่นๆเพิ่มเติมอีกอาทิเช่นการจับคู่จากขวาไปซ้าย  express  ที่คอมไพล์ไว้แล้ว  การตั้งชื่อ  groups ใช้กับ Unicode ได้อย่างเต็มที่ นอกจากนั้นยังยอมให้ผู้ใช้กำหนดให้มีการเรียกฟังก์ชันได้ในช่วงขั้นตอนการเปลี่ยน regular expression อีกด้วย

การดีบัก

PHP ไม่ได้มีการดีบักที่กว้างขวางครอบคลุมมากนัก แต่โปรแกรมของบริษัทซอฟต์แวร์อื่นๆและ Zend ยอมให้มีการดีบักและการทดสอบเพิ่มขึ้นได้

มีระบบติดตามผลและข้อมูลสภาพแวดล้อมที่ครอบคลุมที่สามารถใส่ลงไปในเพจหรือแสดงผลในเพจต่างหากก็ได้   โปรแกรม  Microsoft Visual Studio .NET ยอมให้มีการดีบักเพจขณะที่กำลังประมวลผลได้ นอกเหนือจากการดีบักสคริปท์ในฝั่งไคล์เอ็นต์และ stored procedures ของ SQL Server แล้ว

ระบบจัดการความผิดพลาด

ไม่มีบริการดักความผิดพลาด แต่มีฟังก์ชันจัดการและบันทึกความผิดพลาด

รองรับการทำงานของ  structured  exception handling (นอกเหนือจากด่านป้องกัน "ขั้นสุดท้าย" สำหรับโค้ดที่ประมวลผลไม่ว่าจะมีความผิดพลาดเกิดขึ้นหรือไม่ก็ตาม),  raising  customer  exceptions และการกำหนด custom error pages สำหรับความผิดพลาดที่ไม่อาจแก้ไขได้แบบต่างๆ

ระบบปรับแต่งภาพ

ไม่มีบริการในตัวโดยตรง แต่ใช้ร่วมกับคอมโพเน้นต์ของบริษัทซอฟต์แวร์อื่นๆได้

มีคุณสมบัติการสร้างและปรับแต่งภาพจำนวนมาก (ดูที่คลาส System Drawing ของ .NET Framework)

การนำโค้ดกลับมาใช้ใหม่

ฟังก์ชันที่ผู้ใช้กำหนดเอง มีความสามารถในการสร้าง Classes และใส่ไฟล์ลงไปได้

User Controls, Server Controls, คลาสลักษณะเฉพาะตัว และใส่ไฟล์ลงไปได้

การทำงานหลายๆงานพร้อมกัน

PHP มีโมเดลการทำงานหลายๆงานพร้อมกันที่ดี

รองรับการทำงานได้อย่างเต็มที่  ซึ่งไม่เพียงแต่เรียกเพจพร้อมกันในงานแยกจากกันแล้ว และถ้าจำเป็นแต่ละเพจยังสร้างงานของตนเองขึ้นมา เพื่อทำพร้อมกันหรือทำงานต่างช่วงเวลากันก็ได้

การทำแคชข้อมูล

มีคุณสมบัติการทำแคชข้อมูลในตัวจำกัด

มี  cache API ที่ทำงานได้อย่าครอบคลุม เพื่อจัดเก็บข้อมูลแทบทุกประเภท (อาทิเช่นผลลัพธ์การคิวรีดาต้าเบสเป็นต้น)   โดยมีจุดสิ้นสุดการใช้งานโดยอิงกับเวลา   การใช้งาน  หรือการอ้างอิงกับไฟล์อื่นๆหรือข้อมูลอื่นๆในแคชก็ได้ นอกจากนั้นเรายังสามารถเรียกฟังก์ชันที่ผู้ใช้กำหนดขึ้นมาเองได้เมื่อข้อมูลบางอย่างหายไปจากแคชแล้ว

การทำงานกับภาษาต่างๆ

ใช้กับ Unicode ได้อย่างเต็มที่

ใช้งานกับสตริง  Unicode  และการเข้ารหัสตัวอักษรแบบต่างๆหลายชนิด ส่วนฟังก์ชันวันที่ ตัวเลข และสกุลเงินจะอิงกับการใช้งานในประเทศต่างๆ      และจะมีการปรับแต่งเอาท์พุดขึ้นอยู่กับการกำหนดประเทศปัจจุบันแทนที่จะต้องเรียกฟังก์ชันอีกชนิดหนึ่ง) รองรับการใช้ resource files เพื่อแปลงแอพพลิเคชันให้เหมาะสมกับการใช้งานในประเทศต่างๆได้ในทันที

SMTP, HTTP, FTP, POP3

ใช้งานกับอินเทอร์เน็ตโพรโตคอลหลากชนิดได้โดยตรง

บริการ  SMTP  จะขึ้นอยู่กับ ITS SMTP Service ส่วนบริการ HTTP จะทำงานได้เป็นอย่างดี แม้ .NET ไม่มีบริการ  FTP หรือ POP3 ก็ตาม แต่ผู้ใช้ยังสามารถหาคอมโพเน้นต์ที่วางจำหน่ายหรือแจกฟรีมาใช้สำหรับฟังก์ชันดังกล่าวได้

สภาพแวดล้อมในการพัฒนาแบบเบ็ดเสร็จ

มีเครื่องมือพัฒนาจำนวนมากที่มีคุณสมบัติหลากหลายให้เลือกใช้ได้ฟรีไปจนถึงรุ่นที่มีราคาหลายร้อยดอลลาร์

มีเครื่องมือแจกฟรีสำหรับการพัฒนา  ASP.NET จากไมโครซอฟท์ที่ชื่อว่า ASP .NET Web Matrix ส่วนเครื่องมือที่ได้รับความนิยมมากที่สุดก็คือ  Visual  Studio  .NET ใช้ได้กับภาษา .NET ทุกชนิด มีเครื่องมือดาต้าเบสสำหรับสร้าง  SQL และทดสอบดาต้าเบส มีเครื่องมืออกแบบเว็บที่มีระบบควบคุมเวอร์ชัน ระบบดีบักที่ทันสมัยและคุณสมบัติอื่นๆอีกมากในตัว  ถ้าต้องการดูรายชื่อเครื่องมือทั้งหมดให้เข้าไปดูได้ที่  MSDN Visual Studio Developer Center ส่วนเครื่องมืออื่นๆอาทิเช่น  Borland  C# Builder และ Macromedia Dreamweaver MX ก็รองรับการทำงานของ ASP.NET ได้เช่นกัน

การทำงานกับเว็บเซิร์ฟเวอร์

ใช้งานกับเว็บเซิร์ฟเวอร์ได้เกือบทุกชนิด

ใช้ได้กับ IIS และ Apache 2.0 เวอร์ชันเชิงพาณิชย์ของ Covalent

การทำงานกับระบบปฏิบัติการ

สามารถแปลงไปใช้ได้กับโอเอสแทบทุกชนิด   อาทิเช่น  Microsoft  Windows,  Mac,  OS  X,  Amiga, Solaris, Free BSD, Linux, AIX และอื่นๆอีกมาก

ปัจจุบันใช้ได้กับ Windows 2000, Windows XP และ Windows Sever 2003 เท่านั้น

การเปรียบเทียบซินแทกซ์และงานพื้นฐานต่างๆ

หัวข้อต่อไปนี้จะเป็นการเปรียบเทียบระหว่างซินแทกซ์ของ PHP และ .NET รวมทั้งการเขียนโปรแกรมพื้นฐานต่างๆ

การเขียนคอมเมนต์

PHP  ยอมให้คุณใส่ความเห็นลงไปในโค้ดโดยใช้  C,  C++  และซินแทกซ์สไตล์เชลล์ของ  Unix  ข้อความที่อยู่ในกรอบความเห็นจะไม่ถูกประมวลผล โดยทั่วไปแล้ว ถ้าหากต้องการใส่ความเห็นลงไปในโค้ด Visual Basic .NET ใน ASP.NET คุณก็เพียงแต่ใช้ <%-- เพื่อเปิด Comment และใช้ --%> เพื่อปิด โค้ดตัวอย่างชุดที่ 1 แสดงวิธีการเขียนความเห็นในสภาพแวดล้อมแต่ละแบบ

PHP
/* This is a block of text That has been commented out */
VB.NET
<%-- This is a comment. --%>

ตัวแปร

แม้ว่า  PHP  และ  Visual  Basic .NET มีโครงสร้างภาษาที่คล้ายคลึงกันก็ตาม แต่ซินแทกซ์ที่ใช้กลับแตกต่างกันอย่างมาก  ส่วน  Visual  Basic .NET สร้างขึ้นมาโดยอิงกับโมเดล OOP การกำหนดตัวแปรจึงเข้มงวดมากกว่า PHP เนื่องจาก PHP ใช้วิธีการกำหนดตัวแปรโดยการใส่เครื่องหมายดอลลาร์ ($) หน้าชื่อตัวแปรเท่านั้น

คุณกำหนดตัวแปรใน  Visual Basic .NET โดยการกำหนดชื่อและคุณสมบัติ ข้อความกำหนดตัวแปรใช้คีย์เวิร์ด Dim ในขณะที่ตำแหน่งและเนื้อหาจะเป็นตัวกำหนดคุณสมบัติของตัวแปร นอกจากนั้นยังมีการกำหนดตัวแปรออกเป็นระดับต่างๆอีกด้วย อาทิเช่น local and module, ประเภทข้อมูล, lifetimes และ accessibitlity เป็นต้น

ในตอนแรกแนวทางนี้อาจดูซับซ้อนเกินไปอยู่บ้างเมื่อเทียบกับการกำหนดตัวแปรของ  PHP  แต่วิธีการนี้จะช่วยให้นักพัฒนาทำงานได้สบายมากขึ้น   ASP.NET   เน้นไปที่การช่วยให้นักพัฒนาสร้างแอพพลิเคชันประสิทธิภาพสูง  และการกำหนดประเภทของข้อมูลช่วยให้งานต่างๆง่ายขึ้นอาทิเช่น  การทำความสะอาดตัวแปร การดีบัก การจัดการกับข้อยกเว้นและความผิดพลาด และการแก้ไขโค้ดเป็นต้น โค้ดตัวอย่าง 2 แสดงวิธีกำหนดตัวแปรในสภาพแวดล้อมแต่ละชนิด

PHP
$head_count $foo $X $obj
VB.NET
Dim head_count As Integer Dim foo As String Dim X As Date Dim Obj As object

 การกำหนดประเภทข้อมูล

วลี  AS  ในประโยคกำหนดประเภทข้อมูลจะช่วยให้คุณกำหนดประเภทข้อมูลหรือประเภทออปเจ็กต์ของตัวแปรที่คุณต้องการขึ้นมาได้ คุณสามารถกำหนดตัวแปรประเภทต่างๆดังต่อไปนี้ได้

  • ประเภทข้อมูลเบื้องต้น อาทิเช่น Boolean, Long หรือ Decimal
  • ประเภทข้อมูลแบบ composite อาทิเช่น array หรือ structure
  • ประเภทออปเจ็กต์หรือคลาสจาก Visual Basic หรือแอพพลิเคชันอื่นๆอาทิเช่น Label หรือ Textbox

คุณสามารถกำหนดตัวแปรหลายๆอันที่เป็นประเภทเดียวกันในบรรทัดเดียวกันได้   โดยไม่จำเป็นต้องกำหนดประเภทข้อมูลซ้ำ  ซึ่งในประโยคต่อไปนี้ตัวแปร  numStudents,  numGTA  และ  numProfessors กำหนดให้เป็นประเภท Integer เหมือนกัน

Dim numStudents, numGTA , numProfessors As Integer ' All three are Integer variables.


ถ้าหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับประเภทข้อมูลดู  Data  Types  ถ้าหากต้องการทราบข้อมูลเกี่ยวกับการเขียนโปรแกรมเชิงออปเจ็กต์เพิ่มเติม ดูหัวข้อ Object-Oriented Programming in Visual Basic

การกำหนด lifetime

lifetime  เป็นตัวแปรที่ใช้กำหนดว่าตัวแปรแต่ละตัวจะมีการใช้งานนานขนาดไหน ตัวแปรแบบ local ที่กำหนดเอาไว้ในคำสั่ง  Dim  จะมีอยู่นานตราบเท่าที่มีการประมวลผล  procedure อยู่ ถ้าหาก procedure หยุดทำงาน ตัวแปรแบบโลคอลทั้งหมดจะหายไป รวมทั้งค่าที่อยู่ในตัวแปรด้วย

แนวคิดของ  lifetime  มีประโยชน์อย่างมากในการช่วยให้นักพัฒนาสร้างแอพพลิเคชันขึ้นมา โดยที่ไม่จำเป็นต้องกังวลเกี่ยวกับปัญหาจำนวนมากที่เกิดขึ้นในแอพพลิเคชันขนาดใหญ่  อาทิเช่นการบริหารเมมโมรีอย่างมีประสิทธิภาพเป็นต้น ถ้าหากมีการกำหนด  lifetime ให้ตัวแปรอย่างเหมาะสมแล้ว คุณสามารถกำหนดให้ .NET ทำความสะอาดตัวแปรที่ไม่ได้ใช้งานอีกได้

ถ้าหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ lifetime ดูหัวข้อ Lifetime

การกำหนดขอบเขต

ตัวแปรแบบ  local  อีกชนิดหนึ่งที่กำหนดเอาไว้ภายใน  procedure  (procedure มีความหมายเท่ากับฟังก์ชัน) ส่วนตัวแปรแบบ non-local จะกำหนดเอาไว้ภายนอก procedure โดยจะอยู่ภายใน class หรือ structure

ตัวแปรแบบ  non-local ที่อยู่ใน class หรือ structure อาจกำหนดให้เป็นแบบใช้ร่วมกันหรือไม่ก็ได้ ถ้าหากกำหนดโดยใช้คีย์เวิร์ด  Shared  ตัวแปรตัวนี้จะใช้ร่วมกันได้  และตัวแปรจะมีเพียงชุดเดียวในกลุ่มของ  class หรือ structure  ทั้งหมด  ถ้าหากไม่ได้ใช้คีย์เวิร์ด  Shared ตัวแปรแบบนี้เป็นแบบ instance ซึ่งคุณต้องสร้างตัวแปรแต่ละก็อปปี้ให้แก่  class  หรือ structure แต่ละชุด ตัวแปร instance แต่ละก็อปปี้จะใช้ได้กับ instance ซึ่งเป็นผู้สร้างตัวแปรขึ้นมาเท่านั้น

ขอบเขตของตัวแปรก็คือการที่โค้ดทั้งหมดสามารถอ้างอิงกับตัวแปรได้โดยที่ไม่จำเป็นต้องเรียกชื่อตัวแปร  เราสามารถแยกแยะขอบเขตของตัวแปรได้โดยดูว่ามีการกำหนดตัวแปรเอาไว้ที่ไหน   โค้ดที่อยู่ในแต่ละส่วนสามารถใช้ตัวแปรที่กำหนดเอาไว้ในส่วนนั้นโดยที่ไม่จำเป็นต้องเรียกชื่อตัวแปรเหล่านั้นก่อน  การกำหนดขอบเขตต้องปฏิบัติตามกฎเกณฑ์ดังต่อไปนี้

  • ขอบเขตของตัวแปรแบบ shared หรือ instance อยู่ภายใน structure หรือ class ที่เป็นตัวกำหนดตัวแปรดังกล่าวขึ้นมา 
  • ขอบเขตของตัวแปรแบบ local อยู่ใน procedure ซึ่งกำหนดตัวแปรนั้นขึ้นมา

อย่างไรก็ตามถ้าหากคุณกำหนดตัวแปรแบบ  local  เอาไว้ภายใน block ขอบเขตของตัวแปรจะอยู่ใน block นั้นเท่านั้น  ตัวแปรแบบ local จะทำงานอยู่ภายใน control block ที่กำหนด โดยที่ control block อาจจะเป็น procedure, คำสั่ง if, คำสั่งวนลูปและอื่นๆอีกมาก

ถ้าหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ scope ดูที่ Scope

กำหนด accessibility

.NET   มีแนวคิดพื้นฐานเรื่องความสามารถในการเรียกใช้   (accessibility)  ตัวแปรซึ่งจะช่วยให้นักพัฒนาควบคุมว่าจะให้โค้ดชุดใดที่เรียกใช้ตัวแปรแต่ละตัวได้บ้าง  ตัวอย่างเช่นถ้าหากคุณต้องการค่าคงที่สำหรับสูตร  และต้องการความมั่นใจว่าค่าคงที่ของคุณจะไม่มีการเปลี่ยนแปลงโดยโค้ดอื่นๆที่อยู่ภายนอกคลาส  คุณต้องกำหนดตัวแปรเป็นแบบ private ลักษณะนี้

Private myConstant As Integer

คุณสามารถใช้คีย์เวิร์ดตั้งแต่หนึ่งตัวขึ้นไป  (อาทิ  Dim, Public, Protected, Friend, Protected Friend หรือ  Private)  ในคำสั่งกำหนดตัวแปร เพื่อใช้เป็นการกำหนดรูปแบบ accessibility ให้แก่ตัวแปร ซึ่งโดยทั่วไปแล้ว คุณมักจะใช้แค่ public หรือ private เท่านั้น

คุณสามารถกำหนดคีย์เวิร์ดเหล่านี้ให้แก่ตัวแปร  module, structure, class หรือ instance ได้ แต่ถ้าหากอยู่ใน procedure จะยอมให้มีการใช้แค่คีย์เวิร์ด Dim เท่านั้น และ accessibility ต้องเป็น private เสมอ

เอาท์พุด

วิธีการปกติในการเอาท์พุดข้อมูลใน  PHP ผ่านทาง echo() language construct รูปแบบที่ใกล้เคียงมากที่สุดใน ASP.NET  ก็คือ  Response.Write()  method  หรือ <%= %> construct ซึ่งใช้เป็นตัวย่อของ Response.Write() นั่นเอง โค้ดตัวอย่าง 3 แสดงซินแทกซ์พื้นฐานสำหรับการเขียนค่าๆหนึ่งขึ้นมาในเพจ

PHP
<?php $hello = "hi how are you\n"; echo $hello; ?>
VB.NET
<% Dim Hello As String = "Hi how are you" & vbcrlf Response.Write(Hello) %>

อย่างไรก็ตามวิธีการส่งเอาท์พุดไปให้บราวเซอร์ในลักษณะนี้ ก็เพื่อทำให้คอมแพตทิเบิลย้อนหลังไปหา ASP รุ่นเก่าเท่านั้น  โมเดลควบคุมที่อิงกับเหตุการณ์แบบใหม่ของ ASP.NET ยอมให้มีการเอาท์พุดข้อมูลไปยังบราวเซอร์ได้โดยการกำหนดคุณสมบัติเอาไว้ใน  server control เทคนิคนี้จะช่วยให้มีการแยกเลย์เอาท์กับโค้ดออกจากกันโดยเด็ดขาด ทำให้การแก้ไขโค้ดทำได้ง่ายขึ้น และจำเป็นต้องสร้างโค้ดน้อยกว่ามากในสถานการณ์ที่ซับซ้อนเมื่อเทียบกับ PHP

 

<script language="VB" runat="server">

Sub Page_Load(sender As Object, e As EventArgs) TheDate.Text = DateTime.Now End Sub


</script>
The current date is: 
<asp:Label id="TheDate" runat="server"/>

ตัวอย่างนี้เป็นการกำหนด  Label  control ในฝั่งเซิร์ฟเวอร์ที่มีชื่อว่า TheDate และในช่วงที่ทำการ Load เพจ ก็จะมีการกำหนดคุณสมบัติ  Text  ของ  label  ตัวนี้ให้แก่วันที่และเวลาปัจจุบัน เอาท์พุด HTML ตัวนี้จะเหมือนกับอีกสองเวอร์ชัน ยกเว้นการแสดงผล Label control จะอยู่ในรูปของ span tag ซึ่งบรรจุอะไรก็ตามที่กำหนดเอาไว้เป็นข้อความของ label

 

การประมวลผลตามเงื่อนไข

IF/ELSE

PHP  มีการประมวลผลตามเงื่อนไขหลายชนิด  อาทิเช่น for, while, switch และ foreach แต่รูปแบบที่มีการใช้งานมากที่สุดก็คือ if/else ส่วน Visual Basic .NET มีโครงสร้างที่คล้ายคลึงกันและใช้ซินแทกซ์ที่คล้ายคลึงกัน โค้ดตัวอย่าง 4 แสดงการใช้ตรรกะเงื่อนไขที่เท่ากันใน PHP และ Visual Basic .NET

PHP
if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b"; }
VB.NET
If a > b Response.Write ("a is bigger than b") ElseIf a = b Then Response.Write ("a is equal to b") Else Response.Write ("a is smaller than b") End If

Switch

คำสั่ง   switch   เป็นโครงสร้างภาษาพื้นฐานสำหรับภาษาเขียนโปรแกรมส่วนใหญ่   เมื่อตอนที่คุณต้องการทดสอบ expression  เพียงชุดเดียวกับค่าหลายๆชุด  ปกติแล้วเรามักจะใช้  switch แทนคำสั่ง if ในกรณีที่บล็อกมีคำสั่ง else/if/else จำนวนมากเกินไป

โค้ดตัวอย่าง  5  แสดงการเปรียบเทียบระหว่างคำสั่ง switch ของ PHP กับคำสั่ง Select Case ของ Visual Basic

PHP
switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; default: print "i is not equal to 0, 1 or 2"; }
VB.NET
Select Case Number i Case 0 description = "0" Wesponse.Write ("i equals 0") Case 1 description = "1" Response.Write ("i equals 1") Case 2 description = "2" Response.Write ("i equals 2") Case Else description = " i is not equal to 0, 1 or 2" Response.Write ("i is not equal to 0, 1 or 2 ") End Select

การวนลูป

โครงสร้าง  control แบบพื้นฐานอีกชนิดหนึ่งก็คือการวนลูป โดยที่ทำ PHP และ .NET รองรับการวนลูปแที่แตกต่างกันออกไปหลายชนิด

PHP
for ($i = 1; $i <= 100; $i++) { print $i; }
VB.NET
Dim sum As Integer = 0 Dim counter As Integer For counter = 1 To 100 Step 5 sum += counter Next For i = 1 To 100 Response.Write (i) Next I

ถ้าหากพูดถึง Visual Basic การวนลูปชนิดนี้มีชื่อว่า For... Next ส่วนใน PHP ใช้ชื่อว่าการวนลูปแบบ For ซึ่งในตัวอย่างนี้เครื่องหมาย  += ใช้เป็นตัวย่อสำหรับ sum = sum+counter เราสามารถหยุดการวนลูปใน PHP โดยใช้คำสั่ง Break ส่วนการหยุดลูป For... Next ใช้คำสั่ง Exit For

การวนลูปแบบมีเงื่อนไข

การวนลูปแบบมีเงื่อนไขเอาไว้จัดการทำคำสั่งเดิมซ้ำแล้วซ้ำเล่าซึ่งจะหยุดทำงานก็ต่อเมื่อเงื่อนไขที่กำหนดเอาไว้เป็นจริงขึ้นมา โค้ดตัวอย่าง 7 แสดงตัวอย่างการวนลูปแบบมีเงื่อนไขในแต่ละภาษา

PHP
$i = 1; while ($i <= 10): print $i; $i++; endwhile;
VB.NET
Dim counter i As Integer = 1 Do While counter i <= 10 Response.Write(i) counter i += 1 Loop

การวนลูปประเภทนี้ใน  Visual  Basic มีชื่อว่าคำสั่ง Do... Loop หรือการวนลูปแบบชั่วคราว นอกจากนั้น PHP ยังรองรับการวนลูปแบบ  Do...  Whileอีกด้วย ซึ่งคล้ายคลึงกับการวนลูปแบบชั่วคราว ยกเว้นการตรวจสอบเงื่อนไขว่าเป็นจริงหรือไม่จะกระทำตอนสิ้นสุดการวนรอบแต่ละครั้งแทนที่จะเป็นตอนเริ่มต้นการวนลูป    ความแตกต่างหลักจากการวนลูปชั่วคราวปกติก็คือ   ระบบจะรับประกันว่าการวนลูป  Do...  While  รอบแรกจะทำงานอย่างแน่นอน (การตรวจสอบว่าเป็นจริงตามเงื่อนไขจะเกิดขึ้นในตอนท้ายของการวนลูป)  ในขณะที่การวนลูปแบบชั่วคราวอาจไม่จำเป็นต้องทำงานก็ได้   (การตรวจเช็คเงื่อนไขก็เป็นจริงหรือไม่จะเกิดขึ้นในตอนแรกแต่ละรอบ   ถ้าหากเงื่อนไขเป็น FALSE ตั้งแต่แรก การประมวลผลลูปจะหยุดทันที)

ตัวอย่างโค้ด PHP

$i = 0; do { print $i; } while ($i>0);

การวนลูปแบบนี้จะทำงานแค่ครั้งเดียวเท่านั้น   เนื่องจากเมื่อผ่านรอบแรกแล้วและมีการตรวจสอบเงื่อนไขว่าเป็นจริงหรือไม่ จะได้ค่าเป็น FALSE ($i ไม่ได้มากกว่า 0) การประมวลผลผลลูปก็จะหยุดลง ใน Visual Basic .NET คุณสามารถเขียนโปรแกรมได้ใกล้เคียงกัน

Dim counter i As Integer = 0 Do Response.Write (i)counter Loop While counter i > 0


อย่างไรก็ตาม  Visual  Basic  .NET  มีคุณสมบัติการวนลูปในตัวแบบที่ PHP ไม่มี นั่นก็คือการตรวจสอบเงื่อนไขทุกครั้งจนกว่าจะเป็นจริง

การวนลูปแบบ Foreach

PHP  4 (ไม่ใช่ PHP 3) มีคำสั่ง foreach ด้วย เหมือนกับ ASP.NET และภาษาอื่นๆบางภาษา วิธีการนี้จะช่วยให้วนลูปอะเรย์ทำได้ง่ายขึ้น  foreach จะทำงานกับตัวแปร array เท่านั้น และจะแจ้งเตือนว่ามีความผิดพลาดเกิดขึ้นเมื่อคุณพยายามที่จะใช้  foreach กับตัวแปรที่ใช้ข้อมูลประเภทอื่นๆ หรือใช้กับตัวแปรแบบ uninitialized ส่วนคำสั่งที่เท่าเทียมกันใน  Visual  Basic .NET ก็คือคำสั่ง For Each... Next โค้ดตัวอย่าง 8 แสดงวิธีการวนลูปกับ array ในแต่ละภาษา

PHP
$i = 0; foreach($a as $v) { print "\$Key[$i]$v \n"; $i++; }
VB.NET
For Each v In a Response.Write a(v) (v & vbcrlf) Next

Array

array  ใน PHP ทำงานต่างจาก array ใน Visual Basic .NET อย่างมาก ที่จริงแล้ว array ใน PHP เป็น associative  array  แต่ใช้เหมือนกับเป็น  index หรือ associative arrays ส่วน arrays ใน Visual Basic  .NET  เป็น  index  arrays  อย่างไรก็ตาม  Visual  Basic  .NET ไม่ได้รองรับการทำงานของ associative  array  แบบนี้  (แต่คุณสามารถสร้างขึ้นมาเองได้ -ดูตัวอย่างด้านล่าง) ภาษาอื่นๆของ ASP.NET รองรับการใช้  array  แบบนี้ แต่ Visual Basic .NET ทำไม่ได้ ดังนั้นเรื่องนี้อาจก่อปัญหาบางอย่างกับนักพัฒนา PHP  ที่ไม่คุ้นเคยกับการใช้ index array แบบพื้นฐานมากกว่า และอยากสร้างโมเดลเป็น associative array ใน  Visual  Basic .NET ก็เป็นได้ โค้ดตัวอย่าง 9 แสดง array แบบง่ายๆใน PHP และ Visual Basic .NET

โค้ดตัวอย่าง 9 ตัวอย่างการสร้าง array PHP

$a = array (0,1,2);

ใน Visual Basic .NET

Dim MySingleArraya() As Integer = New Integer (2) {0,1,2}

Array ของ  Visual Basic .NET มีการกำหนดตัวแปรต่างๆแบบเดียวกับตัวแปรอื่นๆโดยใช้คำสั่ง Dim คุณต้องปฏิบัติตามกฎการตั้งใช้ตัวแปรโดยใช้วงเล็บมากกว่าหนึ่งคู่ขึ้นไป  เพื่อระบุว่านี่เป็น array แทนที่จะเป็น scalar (ตัวแปรที่เก็บค่าเพียงค่าเดียว)

นอกจากนั้นเมื่อตอนที่สร้าง  array  ของ  Visual  Basic .NET ขึ้นมา จำเป็นต้องมีการกำหนดให้เก็บข้อมูลได้เพียงชนิดเดียวอีกด้วย  ถ้าหากกำหนดประเภทเป็น  Object (ประเภทพื้นฐานที่ใช้กับออปเจ็กต์ได้ทุกชนิดใน .NET) array   จะสามารถจัดเก็บข้อมูลได้ทุกประเภท  แต่ค่าจะต้องถูกแปลงไปเป็นประเภทเดิมเสียก่อนจึงจะเรียกออกมาจาก array ได้

array ของ Visual Basic .NET อาจเป็น array ที่ซ้อนกันอยู่หรือเป็น array หลายมิติก็ได้ รวมทั้งยังมีฟังก์ชันอีกหลายชนิดที่เอาไว้จัดการกับ  array  ได้ที่คล้ายคลึงกับการทำงานของ PHP โดยมีข้อยกเว้นอยู่ข้อหนึ่งก็คือ เนื่องจาก  Visual  Basic .NET ไม่มีการใช้ associative array ดังนั้นจึงไม่มีฟังก์ชันเพื่อเรียกใช้หรือทำอินเด็กซ์หรือทำอะไรบางอย่างกับ "Key" ของ array ได้ เพราะองค์ประกอบส่วนนี้ไม่มีอยู่ใน Visual Basic .NET

แม้เราบอกไปแล้วหลายครั้งว่า  Visual  Basic .NET ไม่ได้รองรับการทำงานของ associative arrays แต่เราอาจสร้างสิ่งที่เรียกว่า  collection  ขึ้นมาแทนที่  array  ได้ โดยที่ collection จะทำงานคล้ายคลึงกับ associative arrays สำหรับใช้แก้ปัญหาที่คล้ายคลึงกันได้

ในบางสถานการณ์การจัดเก็บ item ต่างๆเอาไว้ใน collection จะมีประสิทธิภาพมากกว่า array เสียอีก

คุณอาจต้องการใช้  collection  ถ้าหากคุณทำงานกับ items กลุ่มเล็กๆที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา ถ้าหากต้องการสร้าง collection สิ่งที่คุณต้องทำก็คือกำหนดและยกตัวอย่างตัวแปร Collection เหมือนอย่างที่แสดงเอาไว้ด้านล่างนี้

Dim myCollection As New Collection()

จากนั้นคุณสามารถใช้  Add  method  เพื่อเพิ่ม  members  ให้แก่ collection นี้ได้ ซึ่งในตัวอย่างนี้ เราสร้างสตริงขึ้นมา  4  ชุด  จากนั้นก็เพิ่มลงไปใน collection คุณสามารถเพิ่มค่า string เฉพาะเป็น key สำหรับ members  ใน collection ได้ ค่านี้จะถูกส่งต่อไปยัง collection ในรูปของ argument ชุดที่สองสำหรับ Add method

Dim w, x, y, z As String w = "key1" x = "key2" y = "key3" z = "key4" myCollection.Add(w, "1") myCollection.Add(x, "2") myCollection.Add(y, "3") myCollection.Add(z, "4")

แม้ว่าวิธีการนี้อาจดูเหมือนการสร้าง  associative array ใน PHP ก็ตาม แต่ collection จะมีความแตกต่างออกไปอย่างมาก  เนื่องจากมันเป็นออปเจ็กต์โดยตัวของมันเอง  ถ้าหากคุณเป็นนักพัฒนา PHP ที่ต้องการย้ายมาพัฒนา ASP  แล้วละก็ เราขอแนะนำให้คุณใช้ทบทวนสเปกภาษาของ Microsoft Visual Basic .NET ให้ดีเสียก่อนที่จะพยายามย้าย model associative array มายัง Visual Basic .NE

การบริหาร state

งานพื้นฐานอย่างหนึ่งในเว็บแอพพลิเคชันทั่วไปก็คือการบริหาร    state   ซึ่งปกติแล้วจะทำงานโดยใช้คุ๊กกี้   หรือโครงสร้างบริหารสภาพของแอพพลิเคชัน อาทิเช่นตัวแปรแบบ Session เป็นต้น Visual Basic .NET มีวิธีการจัดการกับ state คล้ายคลึงกับ PHP

การกำหนดและเรียกใช้คุ๊กกี้

การกำหนดคุ๊กกี้ในสภาพแวดล้อมทั้งสองชนิดทำได้ง่ายมาก  โค้ดตัวอย่าง  10  แสดงวิธีการสร้างและการอ่านคุ๊กกี้ในแต่ละภาษา

PHP
<?php $value = 'something from somewhere'; /* expire in 1 hour */ setcookie ("TestCookie", $value,time()+3600); ?> /* and to retive the set cookie */ <? echo $_COOKIE["TestCookie"]; ?>
VB.NET
Dim value as string = "something from somewhere" Dim myCookie As New HttpCookie("Something from somewhereTestCookie") Dim now as DateTime = DateTime.Now myCookie.Value = now.ToString()value myCookie.Expires = now.AddHour(1) Response.Cookies.Add(myCookie) 'and to retrieve the set cookie Response.Write(Request.Cookies["What we setTestCookie"].Value)

การกำหนดและการเรียกใช้ตัวแปร session

ตัวแปร  session ใน ASP.NET มีความคล้ายคลึงกับตัวแปร session ใน PHP โดยที่ตัวแปร session ในสภาพแวดล้อมทั้งสองชนิดเอาไว้รองรับการจัดการต่างๆ  รวมทั้งการดัดแปลงคุ๊กกี้ เพื่อทำให้การเข้าไปในเว็บแอพพลิเคชันใดๆมีสภาพที่คงเส้นคงวาเหมือนเดิม

ความแตกต่างจุดสุดท้ายก็คือเมื่อได้รับค่าจากออปเจ็กต์  session  ของ  ASP.NET  ค่าที่ส่งกลับไปจะอยู่ในรูปของ System  Object  พื้นฐานที่คุณสามารถจัดเก็บข้อมูลประเภทใดก็ได้ แต่ค่านี้จะต้องแปลงกลับไปเป็นประเภทเดิมเสียก่อนจึงจะใช้งานได้ โค้ดตัวอย่าง 11 แสดงวิธีการใช้ตัวแปรแบบ session

PHP
<?php session_start(); session_register('today'); $today = getdate(); ?> <?= $today ?>
VB.NET
Session("Today") = DateTime.Now Dim today As Date today = CDate(Session("Today")) Response.Write(today) Response.Write (session("Today"))

นอกจากนั้น  ASP.NET  ยังมีการบริหาร state อีกรูปแบบหนึ่งที่มีชื่อว่า Application State ซึ่งคล้ายคลึงกับตัวแปรแบบ  session  แต่จะคงอยู่จนกระทั่งสิ้นสุดการใช้แอพพลิเคชัน วิธีการนี้จะช่วยให้คุณจัดเก็บข้อมูลต่างๆได้หลายแบบ อาทิเช่นข้อมูลตัวแปร หรือ database connection strings ที่จะไม่มีการเปลี่ยนแปลงขณะที่แอพพลิเคชันทำงานอยู่

ถ้าหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้  กรุณาเข้าไปดูได้ที่หัวข้อ  Application  State  ของ .NET Framework Development Guide

Regular Expression

ASP.NET  รองรับการใช้คุณสมบัติยอดนิยมของการใช้ regular expression ในภาษาอื่นๆได้ อาทิที่มีอยู่ใน Perl และ  awk เป็นต้น องค์ประกอบส่วนหนึ่งของ ASP.NET ถูกออกแบบมาให้คอมแพตทิเบิลกับ regular expression ของ  Perl  5 นอกจากนั้น ASP.NET ยังรองรับคุณสมบัติ regular expression ที่ไม่มีอยู่ในภาษาอื่นๆด้วย อาทิเช่นการจับคู่ขวาไปซ้ายและการคอมไพล์อย่างรวดเร็ว  การที่ ASP.NET คอมแพตทิเบิลกับ regular expression ของ Perl และเนื่องจากนักพัฒนา PHP ส่วนมากใช้ regular expression ที่คอมแพตทิเบิลกับ Perl ดังนั้นคุณจึงไม่จำเป็นต้องแปลงซินแทกซ์จากภาษาหนึ่งไปสู่อีกภาษาหนึ่ง   ถ้าหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ  regular expression ของ .NET ให้เข้าไปดูได้ที่ .NET Framework Regular Expressions

การจัดการกับ Exception (Error)

เฟรมเวิร์กของ   ASP.NET   มีบริการจัดการกับ Exception ที่มีโครงสร้าง  โดยใช้โครงสร้างภาษาที่ทุกคนคุ้นเคยกันดีอยู่แล้วอย่าง  Try/Catch  โดยมีความสามารถที่จะดักข้อแม้ที่อาจเกิดขึ้นในโค้ดได้  ตอนนี้  PHP ยังไม่มีคุณสมบัติข้อนี้ แต่น่าจะถูกเพิ่มลงไปใน PHP 5

กรอบด้านล่างก็คือการทำงานของโค้ดใน Visual Basic .NET

Try ' code that might cause an error here Catch e As ExceptionType ' code to handle the error ' Optional: More Catch blocks here Finally ' code that is always executed End Try

สิ่งที่ต้องบอกเอาไว้ก็คือภายในกรอบ Try อาจจะมีกรอบ Catch มากกว่าหนึ่งชุดขึ้นไปได้ หรือกรอบ Finally หนึ่งชุด  หรือทั้งสองแบบก็ได้  หรือพูดอีกแง่หนึ่งก็คือภายในสถานการณ์ที่คุณทราบว่าไม่มีทางที่จะแก้ไขความผิดพลาดได้ แต่คุณจำเป็นต้องกำจัดออปเจ็กต์บางอย่างทิ้งไป ไม่ว่าจะเกิดความผิดพลาดขึ้นมาหรือไม่ก็ตาม คุณสามารถใช้กรอบ Try. ..Finally โดยที่ไม่มีคำสั่ง Catch ก็ได้

การคิวรีดาต้าเบส

ภายใน  PHP มีวิธีการพื้นฐานสองแบบสำหรับเรียกใช้ดาต้าเบส นั่นก็คือการใช้ส่วนขยายเฉพาะของดาต้าเบสหรือการใช้ไลบราลี PEAR DB อิสระของดาต้าเบสก็ได้

ใน  ASP.NET การเรียกใช้ดาต้าเบสจะกระทำผ่านชุดของออปเจ็กต์ที่มีชื่อว่า ADO.NET ซึ่งทำฟังก์ชันส่วนใหญ่เหมือนกับไลบราลี  PEAR  DB  ส่วนการประมวลผลดาต้าเบสคิวรีที่แท้จริงจะกระทำผ่านชุดของคอนเนกชัน  คำสั่ง พารามิเตอร์  และดาต้าอะแดปเตอร์ออปเจ็กต์  โดยที่ออปเจ็กต์เหล่านี้แต่ละประเภทมีอยู่หลายเวอร์ชันขึ้นอยู่กับประเภทของดาต้าเบสที่เรียกใช้  ตัวอย่างเช่นมีชุดของดาต้าเบสที่ใช้ไดรเวอร์  OLE-DB  (อาทิเช่น  Microsoft  Access) รวมทั้งชุดดาต้าเบสที่ใช้ไดรเวอร์  ODBC  แต่ไม่มีไดรเวอร์ OLE-DB ก็มี นอกจากนั้นยังมีผู้พัฒนาระบบจัดสรรข้อมูลพิเศษออกมาสำหรับ Oracle และ Microsoft SQL Server ที่ปรับแต่งมาเพื่อให้เรียกใช้ดาต้าเบสแต่ละชนิดได้เต็มประสิทธิภาพสูงสุดอีกด้วย นอกจากนั้นยังมีบางบริษัทที่พัฒนาดาต้าเบสของตนเองขึ้นมาด้วย อาทิ MySQL เป็นต้น ซึ่งตัวอย่างในหัวข้อนี้จะใช้ออปเจ็กต์  SQL  Server  เป็นหลัก  เนื่องจากมันเป็นดาต้าเบสที่มีการใช้งานกับ  ASP.NET อย่างแพร่หลายมากที่สุด

System.Data,  System.Data.SqlClient  และ System.Data.oledb เป็นการกำหนดชื่อ (namespaces) ที่ใช้กำหนดวิธีการเรียกใช้ดาต้าเบสใน  ADO.NET  ถ้าหากต้องการกำหนดการเรียกเพจให้แก่คลาสต่างๆ คุณจำเป็นต้องอิมพอร์ตชื่อ System.Data และ System.Data.SqlClient ให้แก่เพจของคุณเสียก่อน

<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %>


โค้ดตัวอย่าง  12  แสดงตัวอย่างวิธีการประมวลผลคิวรีในแต่ละภาษา  โดยใน  PHP เราแสดงการเชื่อมต่อโดยใช้ PEAR  ซึ่งไม่เพียงแต่เป็นวิธีการเชื่อมต่อกับดาต้าเบสที่ได้รับความนิยมมากที่สุดเท่านั้น  แต่ยังคล้ายคลึงกับ ADO.NET มากที่สุดอีกด้วย

 

โค้ดตัวอย่าง 12 การประมวลผลคิวรีใน PHP

<?php //connect require_once('DB.PHP'); $db=DB::connect ("mysql://mydbvie w:user@localhost/mydb"); if (DB::iserror($db)) { die($db->getMessage()); $sql = "select * from mytable"; $q= $db->query($sql); if (DB::iserror($q)) { die($q->getMessage()); } <tr> <td><?= $row[0] ?></td> <td><?= $row[1] ?></td> <td><?= $row[2] ?></td> </tr>

 

โค้ดตัวอย่าง 12 การประมวลผลคิวรีใน Visual Basic .NET

<script runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim myConnection As New SqlConnection("server=(local)\NetSDK;database=mydb;Trusted_Connection=yes") Dim myCommand As New SqlDataAdapter("select * from mytable", myConnection) Dim ds As New DataSet() myCommand.Fill(ds, "myDataset") myDataGrid.DataSource = myDataset myDataGrid.DataBind() End Sub </script> <%--- outputting the resutlt ---%> <form runat="server"> <asp:DataGrid id="myDataGrid" runat="server" /> </form>

ใน  PHP  ผลลัพธ์ของการคิวรีจะจัดเก็บเอาไว้ในตัวแปรที่มีชื่อว่า  result set ในขณะที่ ADO.NET เรียกว่าออปเจ็กต์  Dataset  โดยที่เราจะเรียกดูข้อมูลของ  result set ได้เท่านั้น ในขณะที่ .NET Dataset เป็นข้อมูลที่เก็บเอาไว้ในเมมโมรีจริง  รวมทั้งจะทำการอ่านและบันทึกข้อมูลได้  ซึ่งจะทำให้นักพัฒนา  .NET แก้ไขข้อมูลที่ได้รับกลับมาจากแหล่งข้อมูลได้ง่ายขึ้น

เมื่อตอนที่มีการเอาท์พุดข้อมูล   ASP.NET   มีวิธีการหลายแบบที่ใช้แสดงผลข้อมูลไปยังผู้ใช้หรือไคล์เอ็นต์   วิธีการแรกคล้ายคลึงกับ  PHP  ซึ่งจะมีการวนลูปผ่านทาง result set โดยใช้ออปเจ็กต์ SQLDataReader เพื่อเขียนข้อมูลที่เราต้องการแสดงผลจากคิวรี  ส่วนวิธีการพื้นฐานมากที่สุด (ซึ่งไม่เหมือนกับ PHP) ก็คือการใช้ data binding ของ ASP.NET วิธีการนี้ช่วยให้นักพัฒนาสร้าง User Interface และ Display control ที่สามารถนำไปใช้หรือใช้ซ้ำในทุกส่วนของแอพพลิเคชันใดๆได้        รวมทั้งยังช่วยให้มีการตัดต่อข้อมูลหรือโลจิกบางส่วนมาแสดงผลได้อย่างคล่องตัวมากขึ้นด้วย  ซินแทกซ์ที่คล่องตัวของ  data  binding ไม่เพียงแต่ช่วยให้คุณเชื่อมโยงเข้าหาแหล่งข้อมูลได้เท่านั้น   แต่ยังเชื่อมโยงเข้าหา  properties  collection,  expression  แบบง่ายๆหรือแม้แต่ผลลัพธ์ที่ส่งกลับมาจาก method calls อีกด้วย

ถ้าหากต้องการทำ  data  binding คุณจำเป็นต้องกำหนดแหล่งข้อมูลบางอย่างเสียก่อน อาทิเช่นผลลัพธ์การคิวรีให้แก่คุณสมบัติ  DataSource  ของ  server  control ที่ใช้กับข้อมูลได้ (อาทิเช่น DataGrid) หรือคุณอาจจะกำหนดข้อมูลการทำฟอร์แมทเพิ่มเติมให้แก่แต่ละคอลัมน์  แล้วเรียก  DataBind()  method  ก็ได้  จากนั้น server control จะจัดการงานที่เหลือให้เอง

ตัวอย่างเช่นในโค้ดตัวอย่าง 12 เราใช้ซินแทกซ์ data binding เพื่อเอาท์พุดผลลัพธ์การทำคิวรีออกไปในลักษณะนี้

<%--- In page load event ---%> myDataGrid.DataSource = myDataset myDataGrid.DataBind() <%--- outputting the resutlt ---%> <asp:DataGrid id="myDataGrid" runat="server" />

server  control ที่ใช้กับข้อมูลได้จะจัดสรรฟังก์ชันเพิ่มเติมให้เอง อาทิเช่นบริการสำหรับการทำเพจหรือการแก้ไขข้อมูลในขณะที่แสดงผลเป็นต้น   ถ้าหากต้องการทราบข้อมูลและดูตัวอย่างเพิ่มเติมกรุณาดูที่หัวข้อ   Data  Binding Server Controls

การทำแคชข้อมูลและการทำแคชเพจ

การทำแคชข้อมูลที่มีการเรียกใช้บ่อยๆจะช่วยให้เวลาในการตอบสนองของเว็บไซต์ดีขึ้นอย่างมาก   เนื่องจากการประมวลผลเพจไม่จำเป็นต้องรอคิวรีดาต้าเบสอีกต่อไป ส่วนการทำแคช HTML ซึ่งสร้างมาจากคำสั่งเรียกใช้เพจจะช่วยทำให้เวลาในการตอบสนองดียิ่งขึ้นไปอีก      เนื่องจากเพจที่อยู่ในแคชแล้วไม่จำเป็นต้องประมวลผลอีก     ภาษาทั้งสองชนิดรองรับการทำแคชทั้งสองแบบได้  อย่างไรก็ตาม  ASP.NET มีวิธีการในการทำแคชและบริหารข้อมูลมากกว่า PHP ซึ่งจะทำให้นักพัฒนาเลือกวิธีและนโยบายที่เหมาะกับประสิทธิภาพของแอพพลิเคชันของตนมากที่สุดได้

การทำแคชเพจ

การทำแคชเอาท์พุด  HTML  ของการเรียกเพจจัดเป็นวิธีการพื้นฐานที่ลดภาระการทำงานของเว็บแอพพลิเคชัน แม้ว่า PHP   ไม่มีบริการทำแคชเพจโดยตรง   แต่เราสามารถเขียนโปรแกรมให้ทำขั้นตอนนี้ได้  หรือดาวน์โหลดโปรแกรมของบริษัทอื่นๆมาใช้ได้  โดยปกติแล้วการทำแคชเพจมักเกิดขึ้นในฝั่งของเซิร์ฟเวอร์ได้หลายวิธี ตั้งแต่การทำแคชโค้ดที่คอมไพล์แล้วไปจนถึงการสร้างเอาท์พุดของเพจไปเก็บไว้ในไฟล์แยกต่างหาก   โดยจะมีการอัพเดตไฟล์ทุกครั้งที่มีการอัพเดตโค้ด

ส่วนการทำแคชเพจของ   ASP.NET  จะกระทำผ่าน  OutputCache  API  ระดับล่าง  หรือ  @OutputCache directive   ระดับสูงก็ได้  ถ้าหากมีการเปิดการทำงานของการทำแคชเอาท์พุดแล้ว  รายการแคชของเอาท์พุดจะถูกสร้างในคำสั่ง  GET อันแรกที่อยู่ในเพจ ในขณะที่คำสั่ง GET หรือ HEAD ลำดับต่อๆมาจะเรียกใช้รายการแคชเอาท์พุดโดยตรง จนกว่าจะสิ้นสุดช่วงเวลาที่ใช้เรียกแคช

เอาท์พุดแคชจะขึ้นอยู่กับนโยบายสิ้นสุดเวลาใช้งานและการตรวจสอบความถูกต้องของเพจ  ถ้าหากมีเพจอยู่ในเอาท์พุดแคชและมีการกำหนดนโยบายว่าเพจจะสิ้นสุดอายุการใช้งานภายในเวลา  60  นาทีนับตั้งแต่ถูกสร้างขึ้นมา ดังนั้นเมื่อเวลาผ่านไป  60 นาที เพจก็จะถูกลบออกไปจากเอาท์พุดแคช ถ้าหากได้รับคำสั่งอื่นๆหลังจากช่วงเวลาดังกล่าว ก็จะมีการประมวลผลเพจโค้ดใหม่  จากนั้นเพจก็จะถูกทำแคชอีกครั้งหนึ่ง นโยบายการกำหนดการสิ้นสุดอายุการใช้งานมีชื่อว่า absolute expiration นั่นก็คือเพจจะใช้งานได้ตามช่วงเวลาที่กำหนดเท่านั้น

นอกเหนือจากการทำแคชเอาท์พุดของทั้งเพจแล้ว  ASP.NET  ยังมีวิธีการง่ายๆในการทำแคชเฉพาะบางส่วนของเพจเท่านั้น   ซึ่งเรียกว่าการทำแคชบางส่วน  (fragment  caching)  คุณสามารถเลือกพื้นที่บางส่วนของเพจโดยใช้ user  control  แล้วกำหนดให้พื้นที่ดังกล่าวเป็นแคชโดยใช้  @ OutputCache directive เหมือนอย่างที่ได้อธิบายไปในหัวข้อก่อนหน้านี้โดยที่  directive  ดังกล่าวจะกำหนดช่วงเวลา  (เป็นวินาที)  ว่าเอาท์พุดของ  user control จะทำแคชในเซิร์ฟเวอร์นานขนาดไหน รวมทั้งเงื่อนไขอื่นๆเพิ่มเติมอีกก็ได้

การทำแคชข้อมูล

มีวิธีการหลายแบบสำหรับทำแคชผลลัพธ์การคิวรีใน  PHP  แต่ทว่าไม่ใช่วิธีการโดยตรงของภาษานี้ การสร้าง class หรือ  system  ของ  Data Caching ใน PHP อาจอยู่ในรูปของข้อมูลขนาดเล็กที่ใช้ตัวแปร Session และ/หรือคุ๊กกี้  หรืออาจเป็นการทำแคชข้อมูลขนาดใหญ่ที่มีความซับซ้อนโดยการสร้างคลาส Data caching ของคุณเองขึ้นมาก็ได้   ปัญหาก็คือเมื่อคุณทำงานกับข้อมูลหลายประเภทที่มีความซับซ้อน   การทำงานแบบนี้จะไม่มีประสิทธิภาพ  มีความผิดพลาดเกิดขึ้นได้ง่าย และต้องเขียนโปรแกรมที่ซับซ้อนด้วย

ส่วน  ASP.NET มีวิธีการทำแคชข้อมูลทั้งระบบ (DataSets, arrays, collections, ออปเจ็กต์ XML และอื่นๆอีกมาก)  ผ่านทางออปเจ็กต์  Page Cache ส่วนแอพพลิเคชันที่ต้องการฟังก์ชันที่ซับซ้อนกว่านี้ ASP.NET สามารถทำแคชเฉพาะได้อีก 3 แบบก็คือ expiration, scavenging และ file and key dependencies

  • แคชประเภท expiration ยอมให้นักพัฒนาควบคุมว่าแคชจะหมดอายุเมื่อไหร่ โดยเราอาจกำหนดเป็นเวลาเฉพาะได้ อาทิเช่น 01:00 หรือเป็นเวลาที่สัมพันธ์กับการใช้ข้อมูลนี้เป็นครั้งสุดท้ายก็ได้ อาทิเช่นหมดอายุ 20 นาที หลังจากใช้ข้อมูลเป็นครั้งสุดท้าย และเมื่อข้อมูลหมดอายุแล้ว มันจะถูกลบออกจากแคชและถ้าหากมีความพยายามจะใช้แคชตัวนี้ในอนาคตก็จะได้รับค่าว่างกลับมา เว้นเสียแต่จะมีการใส่ข้อมูลเดิมลงไปในแคชเสียก่อน 
  • แคชแบบ scavenging พยายามที่จะกำจัดข้อมูลที่ไม่ได้ใช้งานบ่อยครั้งหรือไม่สำคัญทิ้งไปในตอนที่เหลือเมมโมรีไม่มากนัก นักพัฒนาสามารถควบคุมได้ว่าจะกำจัดข้อมูลเหล่านี้ทิ้งไปได้อย่างไร รวมทั้งยังบอกใบ้ระบบกำจัดข้อมูลในแคชให้ทราบได้ตอนที่มีการใส่ข้อมูลต่างๆลงไปในแคชเพื่อบอกว่าการสร้างข้อมูลประเภทนี้ยุ่งยากขนาดไหน และข้อมูลนี้ควรมีอัตราการเรียกใช้บ่อยครั้งขนาดไหนจึงจัดว่าเป็นข้อมูลที่มีประโยชน์ 
  • แคชประเภท file and key dependencies ยอมให้มีการตรวจสอบความถูกต้องของข้อมูลในแคชโดยอิงกับไฟล์ภายนอกหรือข้อมูลอื่นๆในแคชก็ได้ ถ้าหากการเชื่อมโยงมีการเปลี่ยนแปลงเกิดขึ้น ข้อมูลที่อยู่ในแคชจะไม่ถูกต้องอีกต่อไปและจะถูกลบออกจากแคช ตัวอย่างของการใช้ฟังก์ชันนี้ในแอพพลิเคชันก็คือถ้าหากคุณมีรายงานขนาดใหญ่ที่ต้องแก้ไขและดาวน์โหลดไปให้พนักงานของคุณโดยตรง แอพพลิเคชันจะประมวลผลข้อมูลที่อยู่ในไฟล์และรายงาน จากนั้นแอพพลิเคชันจะทำการแคชข้อมูล รวมทั้งใส่ความสัมพันธ์ลงไปว่าข้อมูลอ่านมาจากไฟล์ได้ ถ้าหากไฟล์มีการอัพเดต ข้อมูลจะถูกลบออกจากแคช แอพพลิเคชันจะอ่านข้อมูลซ้ำ แล้วใส่ข้อมูลที่อัพเดตแล้วลงไปในแคช

การทำแคชข้อมูลของ  ASP.NET ช่วยให้โปรแกรมเมอร์มีวิธีการที่ต่างออกไปสำหรับบริหารแอพพลิเคชัน ซึ่งจะทำให้แอพพลิเคชันตอบสนองและมีประสิทธิภาพดีขึ้นด้วย    ถ้าหากต้องการทราบข้อมูลเพิ่มเติมดูหัวข้อ   Cache   Class documentation for the Cache object

การส่งอีเมล์

ทั้ง  PHP  และ  ASP.NET มีคุณสมบัติในตัวเพื่อใช้เขียนโปรแกรมเกี่ยวกับอีเมล์โดยเฉพาะ ถ้าหากต้องการส่งอีเมล์โดยใช้ ASP.NET ในตัวอย่างนี้คุณจำเป็นต้องเซ็ตอัพบริการ IIS SMTP การที่คุณจำเป็นต้องติดตั้งบริการนี้ก่อนก็เนื่องจากเมล์ออปเจ็กต์ใน .NET จำเป็นต้องขึ้นอยู่กับออปเจ็กต์ของบริการนี้ อย่างไรก็ตาม .NET ยอมให้คุณทำงานกับเซิร์ฟเวอร์  SMTP ใดๆ หรือเมล์เซิร์ฟเวอร์อย่าง PHP ก็ได้ โค้ดตัวอย่าง 13 จะทำการเปรียบเทียบซินแทกซ์ของภาษาทั้งสองชนิด

PHP
$to = "test@atnoaddress.com"; $from = "me@nosuchaddress.com"; $subject = "hi"; $message = "just wanted to say hi"; mail($to,$subject,$message, $from)
VB.NET
Dim myMail As MailMessage = New MailMessage() myMail.From = "me@nosuchaddress.com" myMail.To = "test@atnoaddress.com" myMail.Subect = "hi" myMail.Body = "just wanted to say hi" SmtpMail.Send(myMail)

โค้ดตัวอย่าง 13 การส่งอีเมล์

การแก้ไข XML และเว็บเซอร์วิส

บริการในตัวสำหรับการเขียนโปรแกรมและการแก้ไข  XML ใน PHP ค่อนข้างย่ำแย่อย่างมาก แม้ว่านักพัฒนาสามารถใช้บริการดังกล่าวเพื่อเขียนโปรแกรมและดัดแปลง  XML ได้ก็ตาม แต่ PHP ไม่มีการเขียนโปรแกรมของ DOM แม้ว่าการเขียนโปรแกรม  DOM  ช้ากว่าการเขียนโปรแกรม SAX ของ PHP ก็ตาม แต่การทำงานกับ DOM ทำได้ง่ายกว่า นอกจากนั้น  PHP  ยังไม่มีความสามารถในการตรวจสอบความถูกต้องของเอกสาร  XML  เทียบกับ DTD หรือ XML SCHEME  อีกด้วย  แถม PHP ยังไม่สามารถทำงานับ XSL/XSLT รวมทั้งเทคโนโลยีอื่นๆอีกมาก ซึ่งถือเป็นเรื่องปกติของผลิตภัณฑ์เว็บแอพพลิเคชันอื่นๆอีกหลายชนิดในตลาด  แม้ว่ามีแพกเก็จ PHP หลายชนิดที่ทำให้ PHP สามารถทำงานหลายอย่างที่เกี่ยวข้องกับ  XML ได้ก็ตาม แต่ .NET และ ASP.NET มีความสามารถที่หลากหลายเพื่อทำงานกับ XML โดยตรง  XML  จัดเป็นเทคโนโลยีที่ถือเป็นหัวใจสำคัญของแพลตฟอร์ม .NET คุณสามารถเรียนรู้เกี่ยวกับเว็บเซอร์วิสได้โดยการอ่านหัวข้อ "วิธีการทำงานของเว็บเซอร์วิสใน ASP.NET"

.NET  Framework  สามารถทำงานกับเงื่อนไขทั้งหมดของ  XML  ที่กำหนดเอาไว้โดย W3C ได้ รวมทั้งยังรองรับการทำงานของ  XSL/XSLT,  XPath,  XQuery  รวมทั้งเทคโนโลยีอื่นๆอีกมาก อาทิเช่น UDDI, WSDL, SOAP for Web services เป็นต้น

แม้ว่าเราสามารถสร้างกลไก XML-RPC ใน PHP ได้ก็ตาม แต่การสร้างเว็บเซอร์วิสกลับป็นเรื่องที่ยากกว่ามาก เว็บเซอร์วิสจะช่วยให้นักพัฒนาสามารถแลกเปลี่ยนข้อมูลและ  procedure โดยใช้โพรโตคอลและมาตรฐานพื้นฐานเพื่อใช้สำหรับ  discovery, data binding และ description ได้ ส่วน .NET สามารถทำงานกับเว็บเซอร์วิสได้อย่างครอบคลุม รวมทั้งเทคโนโลยีที่เกี่ยวข้องกัน อาทิ SOAP, WSDL และ UDDI นอกจากนั้น .NET ยังช่วยให้นักพัฒนาสร้างและพัฒนาเว็บเซอร์วิสขึ้นมาได้โดยง่ายอีกด้วย  ตัวอย่างเช่นนี่เป็นตัวอย่างการใช้เว็บเซอร์วิสเพื่อสร้างข้อความ "hello world" แบบง่ายๆขึ้นมา

<%@ WebService Language="VB" Class="HelloWorld" %> Imports System Imports System.Web.Services Public Class HelloWorld :Inherits WebService <WebMethod()> Public Function SayHelloWorld() As String Return("Hello World") End Function End Class

.NET  Framework  SDK ยอมให้คุณสร้าง proxy classes โดยใช้คอมมานด์ไลน์ของเครื่องมือ Web Services Description  Language  (WSDL.exe) ได้ ถ้าหากต้องการสร้าง proxy class ที่ชื่อ HelloWorld.cs สำหรับตัวอย่างด้านบนให้คุณกรอกข้อความว่า

WSDL http://someDomain.com/someFolder/HelloWorld.asmx?WSDL

คลาสดังกล่าวมีหน้าตาเหมือนกับคลาสที่สร้างขึ้นมาในหัวข้อก่อน  โดยมันจะมี  method ที่เรียกว่า SayHelloWorld สำหรับส่งสตริงกลับไป  คุณสามารถคอมไพล์  proxy class นี้ไปเป็นแอพพลิเคชันแล้วเรียก method ของ proxy class นี้ โดยใช้ proxy class ที่หุ้มคำสั่ง SOAP ผ่าน HTTP และได้รับคำตอบ SOAP กลับมาในรูปของสตริง

ถ้าหากอิงกับมุมมองของไคล์เอ็นต์ โค้ดจะเรียบง่ายอย่างมาก ซึ่งแสดงอยู่ในตัวอย่างด้านล่างนี้

Dim myHelloWorld As New HelloWorld() Dim sReturn As String = myHelloWorld.SayHelloWorld()

ทั้งหมดนี้ก็คือวิธีการสร้างเว็บเซอร์วิสแบบง่ายๆขึ้นมา  ถ้าหากทราบข้อมูลทั่วไปของ  XML  และข้อมูลเฉพาะของเว็บเซอร์วิส ให้เข้าไปที่หัวข้อ "วิธีการใช้ XML ใน .NET Framework"

สรุป

โดยส่วนใหญ่แล้วการแปลงจาก  PHP  ไปเป็น  ASP.NET  ไม่ใช่เรื่องที่ซับซ้อนแต่อย่างใด ถ้าหากเป็นแอพพลิเคชันแบบง่ายๆที่มีขนาดเล็ก  แต่ความแตกต่างในเรื่องของโครงสร้างรวมทั้งแนวทางการใช้  OOP ของ ASP.NET ทำให้การแปลงแอพพลิเคชันที่ซับซ้อนจึงจำเป็นต้องมีการวางแผนอย่างรอบคอบเสียก่อน    คุณจึงจะได้ประโยชน์อย่างเต็มที่จากการแยกตรรกะออกจากข้อมูลอย่างเข้มงวดของ  ASP.NET จากนั้นคุณก็จะประหยัดเวลาในการสร้างฟังก์ชันต่างๆ เนื่องจากคุณจะเขียนโค้ดเพื่อทำงานใกล้เคียงกันน้อยลงนั่นเอง

Filed under: , ,
 

http://cheapshopping.110mb.com/ said:

ขอบคุณครับ

November 4, 2008 12:51 PM
 

Kostenloser WEB Space said:

Andere haben Werbebanner in gratis Web Spaces vorgesehen.

January 12, 2009 8:44 PM
 

anukul said:

ขอบคุณคับมีประโยชน์มากในการทำโปรเจ็คของผม

January 14, 2009 12:42 PM
 

magic said:

ขอบคุณมากๆครับ

August 13, 2009 5:06 PM

Leave a Comment

(required)  
(optional)
(required)  
Add